Фильтровать сетевые устройства от pcap_findalldevs () - PullRequest
0 голосов
/ 13 февраля 2012

Я должен прослушивать все сетевые интерфейсы, установленные на пяти компьютерах (Linux - Ubuntu). Я использую библиотеку pcap для этой цели. Поэтому я нахожу все подходящие устройства, использующие функцию pcap_findalldevs (...), но в результате получаются также устройства usb и loopback, которые я не хочу использовать.

Не могли бы вы подсказать мне, как фильтровать только сетевые (Ethernet и Wi-Fi) устройства?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Полагаю, это зависит от того, что вы подразумеваете под «сетевыми» устройствами.

Если вы имеете в виду устройства IPv4 / IPv6, вы можете запросить pcap_if_t->address, возвращаемое pcap_findalldevs, и посмотреть на addr.sa_family каждого адреса.поле, чтобы определить, поддерживает ли это устройство AF_INET и / или AF_INET6.Устройства с обратной связью будут (pcap_if_t->flags & PCAP_IF_LOOPBACK) != 0.

Проблема в том, что они будут включать устройства, которые не являются Ethernet и WiFi, такие как Token Ring, IP-over-Firewire, PPP и тому подобное.PCAP не предоставляет переносимый способ узнать тип оборудования.

0 голосов
/ 15 февраля 2012

Если под «всеми сетевыми интерфейсами» вы имеете в виду «все интерфейсы, которые подключены к физическим сетям и не захватывают вещи, не относящиеся к сетям» - петлевой интерфейс является примером первого и устройства захвата USB наLinux и FreeBSD 9.0 и более поздние являются примерами последнего - тогда:

  • вы можете устранить петлевые устройства так, как предлагает ответ apmasell;
  • вы можете исключить устройства USB-захвата, игнорируя интерфейсыдля которого pcap_datalink() возвращает DLT_USB_LINUX или DLT_USB_LINUX_MMAPPED;
  • , вы можете исключить устройства захвата Bluetooth, игнорируя интерфейсы, для которых pcap_datalink() возвращает DLT_BLUETOOTH_HCI_H4 или DLT_BLUETOOTH_HCI_H4_WITH_PHDR.

Вам нужно было бы открыть устройства для вызова pcap_datalink().

Это, вероятно, устранит большинство неинтересных устройств (если у вас есть интерфейсы Token Ring, PPP и т. Д., Вы, вероятно, do хочу захватить на них).

...