我应该嗅探安装在fiven机器上的所有网络接口(Linux - Ubuntu)。我正在使用pcap库来达到这个目的。所以我发现使用pcap_findalldevs(...)函数的所有功能设备,但结果也是usb和loopback设备,我不想使用。
你能告诉我,如何只过滤网络(以太网和wifi)设备?
答案 0 :(得分:2)
我认为这取决于你所说的“网络”设备。
如果您指的是IPv4 / IPv6设备,则可以查询pcap_if_t->address
返回的pcap_findalldevs
并查看每个地址的addr.sa_family
字段,以确定该设备是否支持AF_INET
1}}和/或AF_INET6
。环回设备将(pcap_if_t->flags & PCAP_IF_LOOPBACK) != 0
。
问题在于它将包括不是以太网和WiFi的设备,如令牌环,IP-over-Firewire,PPP等。 PCAP并没有提供一种了解硬件类型的便携方式。
答案 1 :(得分:0)
如果“所有网络接口”是指“所有连接到物理网络并且没有捕获到没有考虑网络的东西的接口” - 环回接口就是前者和USB捕获设备的示例Linux和FreeBSD 9.0及更高版本是后者的例子 - 然后:
pcap_datalink()
返回DLT_USB_LINUX
或DLT_USB_LINUX_MMAPPED
; pcap_datalink()
返回DLT_BLUETOOTH_HCI_H4
或DLT_BLUETOOTH_HCI_H4_WITH_PHDR
的接口来消除蓝牙捕获设备。您需要打开设备才能拨打pcap_datalink()
。
这可能会消除大多数不感兴趣的设备(如果你有令牌环,PPP等接口,你可能做想要捕获它们)。