Я использую pylibnet для создания и отправки UDP-пакетов. Таким образом, у UDP-пакетов, которые я построил, у всех, похоже, есть недопустимые контрольные суммы. Пример:libnet создает UDP-пакеты с недопустимыми контрольными суммами
# 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()
Захватив выше пакет на посылающий хост обнаруживает недопустимый контрольную сумму:
# 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
я делаю что-то здесь не так?
Спасибо. Я только что исследовал это, захватив эти пакеты на принимающем хосте. Контрольная сумма также плохо на принимающем хосте (и такое же значение наблюдается при захвате на отправляющем узле). Таким образом, это не похоже на разгрузку контрольной суммы. – Mox
Если принимающий хост реализует стандартный стек протоколов или существует по крайней мере один маршрутизатор между двумя узлами, пакеты никогда не должны быть видимыми на принимающем узле. Что-то еще происходит. –