2010-11-28 78 views
5

我試圖用libpcap監聽兩個設備,但我仍然無法找出如何去做。我試圖將設備設置爲「任何」,但它沒有工作。我正在嘗試編寫DHCP中繼代理,所以我需要聽取eth0和eth1。一次用libpcap監聽兩個設備

我試着創建兩個pcap_loops,每個都有不同的設備和處理程序,但只有第一個pcap_loop有效,第二個被忽略。

有什麼辦法如何做到這一點,或者我應該離開libpcap,並試圖用原始套接字來做到這一點?

回答

3

您需要在單獨的線程中運行pcap_loop(),每個接口一個,我們這樣做,並且它可以工作。

libpcap的某些部分雖然至少是pcap_setfilter(),但不是線程安全的,因此請提供自己的鎖定環境。

如果您不想使用線程,您必須自己提供一個事件循環,您可以在其中使用select/poll或類似方法監視每個設備的文件描述符。您可以使用pcap_get_selectable_fd()獲取設備句柄的文件描述符。

+0

謝謝:)我結束了使用套接字:) – Pirozek 2010-12-04 23:49:40