Я перехватываю пакеты, используя libpcap
. Я рассчитываю размер полезной нагрузки, как указано здесь size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);
Теперь для пакета size_payload
1228, заголовок Ethernet составляет 14 байтов, IP-заголовок IP - 20 байтов, Заголовок TCP составляет 32 байта. В то время как header.caplen
и header.len
составляют 1514 байт. Разве size_payload+size_ip+size_tcp+size_ethernet
не должно быть равно header.caplen
? Кроме того, когда я выгружаю те же пакеты с помощью tcpdump, длина захвата отображается как 1514
. Почему они отличаются? Я ожидал, что ntohs(ip->ip_len)
будет равно header.caplen
и header.len
ИЗМЕНИТЬ
Я ожидал, что ntohs(ip->ip_len)
будет равно header.caplen
и header.len
. Но я нахожу ntohs(ip->ip_len) = 1280
и header.caplen = header.len = 1514
header.caplen
в вашей программе равно 1514, а tcpdump показывает длину захвата как 1514, это звучит так, как будто они сообщают об одном и том же. - person   schedule 30.09.2012