2012-05-04 34 views
1

我試圖使用libpcap來嗅探一些「網絡接口」(包括回送)。在我的示例應用程序中,我的數據包來自端口1234,1235和1236中的環回。我發現已經有一種方法可以使用libpcap_setfilter()來僅使來自這些地址的libpcap過濾數據包:我的目標是將這些數據包相應地轉發到它們來的地址/端口(例如,來自127.0.0.1/1234的數據包可以通過eth0接口;來自127.0.0.1/1235的數據包可以通過eth1轉發;而那些來自127.0.0.1/1236可以通過eth2轉發)。知道我的數據包來自哪個pcap過濾器

我的問題是:有沒有什麼辦法可以從哪些端口確切知道這些數據包來自哪裏,而無需查看其內容?例如,我可以設置多個過濾器,並以某種方式知道哪個過濾器是過濾我的數據包的過濾器?

我已經閱讀了大量的文檔和教程,但目前沒有任何用處。如果答案是「這是不可能的」,我也會好的。

在此先感謝。

回答

1

libpcap運行的捕獲機制只支持一個過濾器,所以libpcap沒有API來設置多個過濾器。

但是,您可以爲同一網絡接口打開多個pcap_t,並對其應用不同的過濾器。然而,從多個pcap_t的讀取,可能是平臺依賴的。我從「eth0」,「eth1」和「eth2」推斷這是Linux,因此您應該可以使用select()poll()或... pcap_get_selectable_fd()pcap_t的返回值以及如果select()poll()或...表示給定的描述符是可讀的,請在相應的pcap_t上調用pcap_dispatch()來處理那個pcap_t的數據包。

相關問題