2017-03-15 1 views
0

Ich entwickle einen benutzerdefinierten Paket-Sniffer in Python3.
Es muss nicht plattformunabhängig sein. Ich benutze Linux.
Die Methode, die ich verwende, ist recvrom() von einem Socket (AF_PACKET, SOCK_RAW).
Es funktioniert gut, aber ich habe ein Problem mit Informationen von recvfrom() zurückgegeben.
recvfrom() gibt ein Tupel mit 5 Komponenten zurück.
Beispiel: ('eno1', 2054, 0, 1, b '\ x00! \ X9b \ x16 \ xfa \ xd1')
Wie interpretiere ich die letzten 4 Komponenten? Wo ist es dokumentiert?
Ich bevorzuge nicht libpcap oder scapy verwenden.

OK! hier ist ein Code-Fragment:
s = socket.socket (socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0003))
...
Paket, pktAdr = s.recvfrom (65565)
print (‚pktAdr: '+ str (pktAdr))Wie interpretiere ich das Ergebnis von recvfrom (Raw-Socket)

Vielen Dank!

+0

Wo ist es dokumentiert? Wie wäre es mit docs.python.org? Außerdem müssen Sie Ihren Code anzeigen, wenn Sie Hilfe benötigen. –

Antwort

0

Es ist nicht dokumentiert auf docs.python.org, also habe ich etwas recherchiert.
Ich bin jetzt in der Lage, mir selbst zu antworten.

Das von recvfrom zurückgegebene Tupel ähnelt einer sockaddr_ll-Struktur, die vom Linux-Kernel zurückgegeben wird.
Das Tupel enthält 5 Komponenten:
- [0]: Schnittstellennamen (zB 'eth0')
- [1]: Protokoll auf der physikalischen Ebene (in Linux/if_ether.h definiert)
- [2] : Paketart (definiert in Linux/if_packet.h)
- [3]: ARPHRD (definiert in Linux/if_arp.h)
- [4]: ​​physikalische Adresse
Das Beispiel in der Frage, bereitgestellt wird, kann in decodierte werden :
- 'eno1'
- ARP-Protokoll (0x806)
- Eingehendes Paket
- Ethernet-Rahmen
- MAC-Adresse
Im Falle einer WiFi-Schnittstelle im Überwachungsmodus wäre das [3] -Element 803 (was "IEEE802.11 + RadioTap-Header" bedeutet).

Hoffe, das wird jemandem helfen

Verwandte Themen