Измерение скорости загрузки/выгрузки с помощью libpcap

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

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

Мои вопросы:

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

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


person codebox    schedule 14.01.2011    source источник


Ответы (3)


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

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

person Community    schedule 14.01.2011

Не рассматривали ли вы возможность взглянуть на pmacct? В прошлом я лично участвовал в этом. Это инструмент C, который использует libpcap для пассивного мониторинга сетевого трафика в целях учета.

person PP.    schedule 14.01.2011

Попробуйте tcpdump

person Eric Fortis    schedule 14.01.2011