pcap почему всегда пакеты по 8 байт ... почему? - PullRequest
0 голосов
/ 17 декабря 2010

Я использую библиотеку pcap, но я не знаю, почему я всегда получаю такой вывод:

новый пакет с размером: udata = 8 hdr = 8 pkt = 8

Thisэто код:

void handle_pcap(u_char *udata, const struct pcap_pkthdr *hdr, const u_char *pkt)
{
  DEBUG("DANY new packet with size: udata= %d hdr=%d pkt=%d", (int) sizeof(udata),(int) sizeof(hdr),(int) sizeof(pkt) );
...
stuff
}

и в другом файле, который я использую:

status = pcap_loop (pcap_obj,
    -1     /* How many packets it should sniff for before returning (a negative value
       means it should sniff until an error occurs  (loop forever) ) */,
    handle_pcap  /* Callback that will be called*/,
    NULL   /* Arguments to send to the callback (NULL is nothing) */);

Это нормально, что вывод?

Я думаю, что нет, потому что иногда моя программа иногда работаетнет ..

Ответы [ 2 ]

6 голосов
/ 17 декабря 2010

Вы печатаете размер указателей вместо того, чтобы заглядывать в pcap_pkthdr * hdr, чтобы увидеть размер пакета.

Размер захваченных данных и размер всего пакета можно найти, просмотрев hdr-> caplen и hdr-> len .

2 голосов
/ 17 декабря 2010

Um.Вы получаете размер (различных) указателей.

Например, sizeof(udata) получает размер u_char *.Вот почему числа выглядят подозрительно.

Если вам нужны размеры пакетов, они указаны в hdr->caplen и hdr->len (первая - это длина перехвата, вторая - длина пакета).

...