J'essaie de lire les trames Ethernet (IEEE 802.2/3) en utilisant principalement socket
. L'application doit juste renifler les trames ethernet et selon le contenu, agir sur elle. Cependant, il n'y a presque aucune information sur la façon de faire cela sur Windows, la valeur par défaut (unix) étant socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
. C'est inexistant à winsock apparemment. Alors, comment puis-je renifler les cadres eth?Python Lire les trames ethernet en utilisant socket sur Windows?
Je suppose que j'ai besoin de se lier à un MAC en utilisant socket.bind()
au lieu de IP.
Mon morceau actuel de 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)
me mène nulle part. Je vois des paquets sur la connexion locale dans Wireshark, mais ce n'est pas pris en python ..
Sur linux, je peux faire sock_raw = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_802_2))
, Rabattre et setsockopt(sock_raw, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq))
Je voudrais ne pas avoir à dépendre trop externe bibliothèques car cela est censé être distribué et donc assez léger. pip install
-les paquets sont corrects, ils peuvent être fournis avec l'installateur.
Ce n'est pas - Il doit être compilé dans MINGW pour que cela fonctionne. Je ne sais pas comment portable il est une fois que je l'ai installé sur ma machine. Il semble que beaucoup de fuzz pour le faire fonctionner. Je vais essayer de le construire en mingw – enrm