从pcap_findalldevs()过滤网络设备

时间:2012-02-13 19:56:01

标签: linux ubuntu pcap

我应该嗅探安装在fiven机器上的所有网络接口(Linux - Ubuntu)。我正在使用pcap库来达到这个目的。所以我发现使用pcap_findalldevs(...)函数的所有功能设备,但结果也是usb和loopback设备,我不想使用。

你能告诉我,如何只过滤网络(以太网和wifi)设备?

2 个答案:

答案 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及更高版本是后者的例子 - 然后:

  • 你可以用apmasell的回答建议的方式消除环回设备;
  • 您可以通过忽略pcap_datalink()返回DLT_USB_LINUXDLT_USB_LINUX_MMAPPED;
  • 的界面来消除USB捕获设备
  • 您可以通过忽略pcap_datalink()返回DLT_BLUETOOTH_HCI_H4DLT_BLUETOOTH_HCI_H4_WITH_PHDR的接口来消除蓝牙捕获设备。

您需要打开设备才能拨打pcap_datalink()

这可能会消除大多数不感兴趣的设备(如果你有令牌环,PPP等接口,你可能想要捕获它们)。