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.
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