2016-07-25 21 views
0

Ich versuche, Ethernet (IEEE 802.2/3) Frames mit hauptsächlich socket zu lesen. Die Anwendung sollte nur Ethernet Frames schnüffeln und je nach Inhalt darauf handeln. Es gibt jedoch fast keine Informationen darüber, wie dies unter Windows zu tun ist. Die Standardeinstellung (Unix-Methode) lautet socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0800)). Dies ist in Winsock anscheinend nicht vorhanden. Wie schnüffle ich Eth Frames?Python Lesen Sie Ethernet-Frames mit Socket unter Windows?

Ich vermute, ich muss an einen MAC mit socket.bind() anstelle von IP binden.

Mein aktuelles Stück Code:

def _receive(interface): #Receive Eth packets. 
    #Interface = '192.168.0.10' 

    sock2 = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) 
    sock2.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)) 
    sock2.bind((interface, 0)) 

    while True: 
     data, sender = sock2.recvfrom(1500) 
     handle_data(sender, data) 

ich Ruft nirgends. Ich sehe Pakete auf dem lokalen Anschluss in Wireshark, aber es ist nicht in Python aufgenommen ..

Unter Linux, ich sock_raw = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_802_2)) tun kann, dann binden und setsockopt(sock_raw, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq))

Ich möchte nicht zu viele externe angewiesen haben, Bibliotheken, weil diese verteilt werden sollen und somit ziemlich leicht sind. pip install-Pakete sind in Ordnung, aber sie können mit dem Installer gebündelt werden.

Antwort

0

Python-Buchse kommt nicht mit Sniffing-Funktionen. So einfach ist das.

Die Idee von einem Netzwerk-Stack in Ihrem Betriebssystem ist, dass Programme für bestimmte Arten von Paketen "zu registrieren" an sie geliefert werden - in der Regel ist dies so etwas wie das Hören auf einem IP-Port, dh. ein bis zwei Ebenen über den Roh-Ethernet-Paketen.

Um alle rohen Ethernet-Pakete zu erhalten, benötigt der Netzwerk-Stack Ihres Betriebssystems eine Art Treiber/Schnittstelle, um Sie dabei zu unterstützen. Deshalb benötigt Wireshark WinPcap.

Meine Vermutung ist, dass Sie mit pypcap ziemlich glücklich sein werden, das möglicherweise PyPi/pip installierbar ist.

+0

Es ist nicht - Es muss tatsächlich in Mingw kompiliert werden, damit es funktioniert. Ich weiß nicht, wie tragbar es ist, wenn es einmal auf meinem Rechner installiert ist. Es scheint eine Menge Fuzz zu sein, um es zum Laufen zu bringen. Ich werde versuchen, es in Mingw zu bauen – enrm