2011-01-14 7 views
1

Я использую libpcap (и winpcap для Windows) в приложении C для мониторинга сетевого трафика. Мне нужно различать загрузку и загрузку трафика на каждом сетевом адаптере, чтобы получить статистику скорости соединения, но выражения фильтра, используемые библиотекой, похоже, не очень упрощают (т. Е. Нет «входящих»/«исходящих» операторов).Измерение загрузки/загрузки с помощью libpcap

Один из подходов, который я рассмотрел, - это запросить IP-адрес каждого адаптера, а затем использовать фильтры, такие как src host 1.2.3.4 (для измерения загрузок) и dst host 1.2.3.4 (для измерения загрузки).

Мои вопросы:

Есть ли лучше/проще подход, чем один из приведенных выше (то, что позволит мне использовать такое же выражение фильтра для каждого адаптера будет хорошо)?

Если вышеприведенный подход - это способ, то есть ли вероятность того, что один адаптер может иметь более одного IP-адреса, связанного с ним? Причина, по которой я прошу, состоит в том, что структура pcap_addr, содержащая данные адреса одного адаптера (в struct pcap_if), имеет «следующий» член, предполагающий, что это возможно.

ответ

2

Во-первых, помните, pcap видит только пакеты. Он не видит «исходящие» или «входящие» - просто пакеты. Так что да, вы должны фильтровать с помощью src/dst в заголовках ip. Нет другого способа определить, является ли пакет входящим или исходящим.

Во-вторых, да, нет ничего, что остановило бы адаптер, имеющий несколько IP-адресов. Поэтому вам нужно захватить IP-адреса, настроенные с этого адаптера. pcap_findalldevs() (Документация WinPCap) должна помочь вам здесь, из которой вы сможете определить, какие устройства вы хотите контролировать.

1

Рассматривали ли вы смотреть на pmacct - Я лично способствовал этому времени в прошлом. Это инструмент C, который использует libpcap для пассивного мониторинга сетевого трафика для целей учета.

+0

+1, мне нравится внешний вид библиотеки. –

 Смежные вопросы

  • Нет связанных вопросов^_^