我應該嗅探安裝在五臺機器上的所有網絡接口(Linux - Ubuntu)。我正在使用pcap庫來達到這個目的。因此,我正在使用pcap_findalldevs(...)函數查找所有有能力的設備,但結果也是usb和loopback設備,我不想使用它們。從pcap_findalldevs()過濾網絡設備()
你能否告訴我,如何過濾網絡(以太網和wifi)設備?
我應該嗅探安裝在五臺機器上的所有網絡接口(Linux - Ubuntu)。我正在使用pcap庫來達到這個目的。因此,我正在使用pcap_findalldevs(...)函數查找所有有能力的設備,但結果也是usb和loopback設備,我不想使用它們。從pcap_findalldevs()過濾網絡設備()
你能否告訴我,如何過濾網絡(以太網和wifi)設備?
我想這取決於你的意思是「網絡」設備。
如果你指的IPv4/IPv6的設備,可以通過pcap_findalldevs
詢問pcap_if_t->address
回來,看看每個地址的addr.sa_family
場,以確定該設備支持AF_INET
和/或AF_INET6
。環回設備將爲(pcap_if_t->flags & PCAP_IF_LOOPBACK) != 0
。
問題是,這將包括不是以太網和WiFi的設備,如令牌環,IP-over-Firewire,PPP等。 PCAP不提供便攜的方式來了解硬件類型。
如果「所有網絡接口」的意思是「所有連接到物理網絡的接口都沒有捕獲未考慮到網絡的事物」 - 回送接口就是前者和USB捕獲設備的一個例子在Linux和FreeBSD 9.0及更高版本中是後者的例子 - 然後:
pcap_datalink()
返回DLT_USB_LINUX
或DLT_USB_LINUX_MMAPPED
來消除USB捕獲設備;pcap_datalink()
返回DLT_BLUETOOTH_HCI_H4
或DLT_BLUETOOTH_HCI_H4_WITH_PHDR
的接口來消除藍牙捕獲設備。您需要打開設備才能撥打pcap_datalink()
。
這可能會消除最無趣的設備(如果您有令牌環,PPP等接口,你可能做想捕捉它們)。