J'utilise pylibnet pour construire et envoyer des paquets UDP. Les paquets UDP que je construis de cette manière semblent tous avoir des sommes de contrôle invalides. Exemple:libnet crée des paquets UDP avec des sommes de contrôle invalides
# python
Python 2.4.3 (#1, Sep 3 2009, 15:37:12)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import libnet
>>> from libnet.constants import *
>>>
>>> net = libnet.context(RAW4, 'venet0:0')
>>> ip = net.name2addr4('www.stackoverflow.com', RESOLVE)
>>> data = 'This is my payload.'
>>> udptag = net.build_udp(sp=54321, dp=54321, payload=data)
>>> packetlen = IPV4_H + UDP_H + len(data)
>>> iptag = net.autobuild_ipv4(len=packetlen, prot=IPPROTO_UDP, dst=ip)
>>>
>>> net.write()
capture le paquet ci-dessus sur l'hôte émetteur révèle une somme de contrôle invalide:
# tcpdump -i venet0:0 -n -v -v port 54321
tcpdump: WARNING: arptype 65535 not supported by libpcap - falling back to cooked socket
tcpdump: listening on venet0:0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
08:16:10.303719 IP (tos 0x0, ttl 64, id 1, offset 0, flags [none], proto: UDP (17), length: 47) 192.168.55.10.54321 > 69.59.196.211.54321: [bad udp cksum 50c3!] UDP, length 0
que je fais quelque chose de mal ici?
Merci. Je viens d'étudier cela en capturant ces paquets sur l'hôte de réception. La somme de contrôle est également mauvaise sur l'hôte récepteur (et est la même valeur observée lors d'une capture sur l'hôte expéditeur). Donc, il ne semble pas que le déchargement de la somme de contrôle soit la réponse ici. – Mox
Si l'hôte destinataire implémente une pile de protocole standard, ou s'il y a au moins un routeur entre les deux hôtes, les paquets n'auraient jamais dû être visibles sur l'hôte récepteur. Quelque chose d'autre se passe. –