如果不在這裏複製所有的源代碼,我正在從pcap_dispatch
打到pcap_callback
函數。 caplen
似乎顯示正確的長度(因爲它總是東西),但len總是等於0.該字段不再填充?這可能是我沒有捕獲的錯誤條件?struct pcap_pkthdr len總是==零
這裏是一個片段...
void myCallback (const struct pcap_pkthdr *header, const u_char *packet, void* buffer)
{
if ((uint16_t)(header->len) != (uint16_t)(header->caplen))
/* Some Error */
streamObj << "Caplen (" << (uint16_t)(header->caplen) << " != "
<< ") Packet Len (" << (uint16_t)(header->len) << ")";
...
}
的header->len
值總是回來爲零。如果需要更多信息,請告訴我。
這發現在運行帶2.6.32內核的libpcap.so.0.9.8的SUSE Linux 11SP1服務器上。該問題僅在使用libpcap.so.0.9.3從SUSE Linux 10SP3升級後才存在。
編輯: 這似乎只是與libpcap.so.0.9.8問題。我重新命名了/ usr/lib /中的鏈接以使用libpcap.so.0.9.3,問題消失了。
我建議你看看你回來的記憶指針! – sarat
@sarat。通常我會同意你的看法。但是,頭指針是由libpcap填充的指針。我真的無法控制那裏會發生什麼。 – user953665
@ user953665如果你認爲某些特別對版本敏感的東西,並且在文檔中沒有關於這種行爲有意改變的註釋,那麼你可能需要從源代碼構建libpcap ...然後進入函數調用得到你的答案。舊版本的完整源代碼可在此獲得:http://www.tcpdump.org/release/ – HostileFork