API pcap для поиска интерфейсов, соответствующих определенным пользователем правилам, тривиально. Вы действительно можете использовать pcap_findalldevs () для взаимодействия со всеми подходящими сетевыми устройствами или использовать pcap_lookupdev () для получения следующего сетевого устройства, которое вы можете использовать с pcap. Определение того, какой интерфейс вы хотите использовать со своим анализатором, может быть проблематичным (с точки зрения кода) в системах с несколькими сетевыми устройствами, и вы захотите определить более явные правила для выбора такого интерфейса. Такие правила обычно определяются статически (например, «активный интерфейс с установленным маршрутом по умолчанию»). Однако у вас может быть несколько маршрутов по умолчанию (подумайте о балансировке нагрузки), и здесь вы можете захотеть прослушать все из них или (например) только через интерфейс ppp. Поэтому выбор целевого интерфейса, который я бы сказал, является задачей, решаемой вне анализатора, а не во время выполнения в коде анализатора.
Например:
Если под «активным интерфейсом» мы понимаем интерфейс, на котором установлен маршрут по умолчанию (я предполагаю, что система Linux здесь):
ip route show 0.0.0.0/0 | awk ' { print $5 ; } ' | xargs ./sniffer
если вы хотите получить активный интерфейс, на котором установлен маршрут по умолчанию, из вашего кода сниффера, вы бы предпочли использовать netlink (7) или proc (5) (/ proc / net / route), а не интерфейс поиска устройств pcap, сложность высокая.
В заключение, логика поиска интерфейса может быть легко записана в какую-либо программу-оболочку в любой системе, и результат (ы) передаются в качестве параметра (ов) вашему анализатору.