0

pcap ライブラリを使用していますが、常に次の出力が得られる理由がわかりません。

サイズの新しいパケット: udata= 8 hdr=8 pkt=8

これはコードです:

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) */);

出力するのは正常ですか?

私のプログラムが時々うまくいかないことがあるので、そうではないと思います..

4

2 に答える 2

6

pcap_pkthdr* hdr を調べてパケットのサイズを確認する代わりに、ポインターのサイズを出力しています。

hdr->caplenhdr->lenを見ると、キャプチャされたデータのサイズとパケット全体のサイズを確認できます。

于 2010-12-17T16:49:21.780 に答える
2

うーん。(さまざまな)ポインターのサイズを取得しています。

たとえばsizeof(udata)、 a のサイズを取得しますu_char *。数字が疑わしいのはそのためです。

パケットのサイズが必要な場合は、hdr->caplenandにありますhdr->len(前者はキャプチャされた長さ、後者はパケット長です)。

于 2010-12-17T16:48:36.727 に答える