2010-12-01 26 views
0

我寫了一個非常簡單的C程序來使用pcap進行數據包捕獲。事情是,它只是在我的網絡活動的一小部分。 (我認爲這種模式只能在新的TCP連接上起作用)。pcap只接收新的連接

例如,當我使用瀏覽器或wget執行GET請求時,或者啓動時,它會拾取一大堆數據包我的X聊天IRC客戶端和連接。

但是,當我離開我的IRC客戶端運行時,它不會接收對應於文本消息的數據包。同樣,它不會在我家網絡上的ARP廣播上播放,或者在ping網站時ping數據包。

我想知道爲什麼它只接收我正在發送/接收的數據包的這個小子集。這是我的代碼。我很感激任何反饋。

代碼:http://pastebin.com/QDHRy6jM

回答

0

固定它。當我將TIMEOUT值從-1更改爲其他值時(即它在所有網絡活動中啓動)。真的不知道那裏發生了什麼(還沒有想太多),所以如果有人請霍拉。

0

什麼是可能是發生的情況是,您正在一個平臺上運行超時行爲,它使用WInPcap處理BPF(* BSD,OS X),Solaris或Windows,其中底層數據包捕獲機制pcap正在使用不立即傳遞數據包,但緩衝了一批數據包,並在緩衝區填滿或超時過期時將它們傳遞給pcap,並且-1被解釋爲「無超時」或「非常長時間到」。

在這種情況下,如果有足夠的數據包到達填滿緩衝區,例如,如果您執行HTTP獲取並返回足夠大的回覆,或者IRC會話涉及大量數據包連接,數據包會顯示出來,但是如果只有偶爾的數據包到達,比如大多數安靜網絡上的ARP數據包,數據包將保留在緩衝區中,直到有足夠的數據包到達填滿緩衝區爲止,這可能會花費無限期的時間,或者很長的超時時間到期,這可能需要相當長的一段時間。

降低超時時間(tcpdump使用1000,即1秒,Wireshark使用100,即1/10秒)意味着數據包將在相當短的時間內出現,即​​使沒有足夠的數據包到達來填滿緩衝區。