2010-12-17 70 views
0

我使用PCAP庫,但我不知道爲什麼我總是得到這樣的輸出:用大小pcap爲什麼總是8個字節的數據包...爲什麼?

新的數據包: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) */); 

是不是正常的輸出?

我認爲不是因爲有時候我的程序有時候不工作。

+0

您需要將答案標記爲正確。 – Benubird 2011-02-24 17:59:51

回答

2

嗯。你正在獲得(各種)指針的大小。

例如sizeof(udata)的大小爲u_char *。這就是爲什麼這些數字令人懷疑。

如果你想要的數據包大小,他們在hdr->caplenhdr->len(前者是捕獲的長度,後者是數據包長度)。

+0

現在好了,這很有道理,非常感謝! – cenos 2010-12-17 16:53:22

6

您正在打印指針的大小,而不是查看pcap_pkthdr * hdr以查看數據包的大小。

您可以通過查看HDR-> caplenHDR-> len個發現所捕獲的數據的大小和整個數據包的大小。

+0

我明白了,非常感謝你 – cenos 2010-12-17 16:53:50

相關問題