2012-02-13 76 views
0

我應該嗅探安裝在五臺機器上的所有網絡接口(Linux - Ubuntu)。我正在使用pcap庫來達到這個目的。因此,我正在使用pcap_findalldevs(...)函數查找所有有能力的設備,但結果也是usb和loopback設備,我不想使用它們。從pcap_findalldevs()過濾網絡設備()

你能否告訴我,如何過濾網絡(以太網和wifi)設備?

回答

2

我想這取決於你的意思是「網絡」設備。

如果你指的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不提供便攜的方式來了解硬件類型。

0

如果「所有網絡接口」的意思是「所有連接到物理網絡的接口都沒有捕獲未考慮到網絡的事物」 - 回送接口就是前者和USB捕獲設備的一個例子在Linux和FreeBSD 9.0及更高版本中是後者的例子 - 然後:

  • 你可以用apmasell的答案建議的方式消除環回設備;
  • 您可以通過忽略接口pcap_datalink()返回DLT_USB_LINUXDLT_USB_LINUX_MMAPPED來消除USB捕獲設備;
  • 您可以通過忽略pcap_datalink()返回DLT_BLUETOOTH_HCI_H4DLT_BLUETOOTH_HCI_H4_WITH_PHDR的接口來消除藍牙捕獲設備。

您需要打開設備才能撥打pcap_datalink()

這可能會消除最無趣的設備(如果您有令牌環,PPP等接口,你可能想捕捉它們)。