J'ai reniflé un paquet IGMP et maintenant je voudrais l'envoyer avec l'aide de python. Est-il possible d'envoyer simplement un paquet commeComment envoyer un paquet IP en Python?
0x0000 01 00 5E 00 43 67 00 02-B3 C8 7F 44 81 00 00 DE ..^.Cg..іИD?..Ю
0x0010 08 00 46 00 00 20 00 01-00 00 01 02 36 4C C0 A8 ..F.. ......6LАЁ
0x0020 00 7B EA 00 43 67 94 04-00 00 16 00 BC 97 EA 00 .{к.Cg”.....ј—к.
0x0030 43 67 Cg
sans aucun générateur de paquets comme l'impacket?
UPD Ok, j'ai essayé d'utiliser des raw sockets, comme ça:
dst = '234.0.67.103'
# Open a raw socket.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW,2)
res=''
temp='01 00 5E 00 43 67 00 02 B3 C8 7F 44 81 00 00 DE 08 00 46 00 00 20 00 01 00 00 01 02 36 4C C0 A8 00 7B EA 00 43 67 94 04 00 00 16 00 BC 97 EA 00 43 67'
for i in temp.split(' '):
res+=chr(int(i, 16))
print res
s.sendto(res, (dst, 0))
Tout va bien, sauf une petite chose ... Si je renifler ce paquet, ça ressemble à ça:
0x0000 01 00 5E 00 43 67 00 02-B3 C8 7F 44 08 00 45 00 ..^.Cg..іИD..E.
0x0010 00 46 07 06 00 00 01 02-C4 25 C0 A8 00 7B EA 00 .F......Д%АЁ.{к.
0x0020 43 67 01 00 5E 00 43 67-00 02 B3 C8 7F 44 81 00 Cg..^.Cg..іИDЃ.
0x0030 00 DE 08 00 46 00 00 20-00 01 00 00 01 02 36 4C .Ю..F.. ......6L
0x0040 C0 A8 00 7B EA 00 43 67-94 04 00 00 16 00 BC 97 АЁ.{к.Cg”.....ј—
0x0050 EA 00 43 67 к.Cg
Comme vous pouvez le voir, pour une raison quelconque, python ignore mes en-têtes et crée les siens. Comment puis-je le réparer?
Cela peut aider: http://stackoverflow.com/questions/316866/ping-a-sit e-in-python (il y a du ping python ici - je suppose que vous pouvez l'adapter) – sje397
Avez-vous essayé [raw sockets] (http://stackoverflow.com/questions/1117958/how-do-i-use-raw- socket-in-python)? – kichik
@ sje397 Merci pour votre réponse. Eh bien, dans cet exemple, ils calculent encore la somme de contrôle, créent des en-têtes, etc. Mais j'ai déjà un paquet prêt et je voudrais juste l'envoyer, sans le reconstruire. –