Размер пакета libpcap - PullRequest
       7

Размер пакета libpcap

1 голос
/ 07 апреля 2010

Я работаю с libpcap в C на linux (centos) и следую этому руководству Я хочу просто распечатать весь пакет в ascii, и мне удалось заставить его работать приведение его к u_char * в функции "my_callback". Но я не могу понять, как получить длину данных. strstr не работал. заголовок имеет элемент len, к которому вы можете получить доступ, чтобы получить размер, но я не могу найти ничего похожего для * передаваемого пакета. Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010

В вашем обратном вызове член caplen переменной pkthdr (см. Struct pcap_pkthdr) содержит размер захваченного пакета.

Например, предположим, что пакет захвачен.Общая длина кадра составляет 1024 байта.Однако драйвер захвата захватил только первые 128 байтов кадра и сделал его доступным для вашего обратного вызова.

В этом случае вы должны ожидать, что pkthdr-> caplen будет 128, а header-> len будет 1024.

1 голос
/ 15 июля 2013

Общий размер пакета находится в поле «общая длина» в заголовке ip (http://en.wikipedia.org/wiki/IPv4_header#Total_Length).

Как получить это значение с помощью libpcap можно найти в этом примере: http://www.tcpdump.org/sniffex.c

Вы просто должны получить значение поля, которое ссылается на «общую длину» (с именем ip_len) из этой переменной:

const struct sniff_ip *ip;              /* The IP header */
...