Измерение скорости загрузки / выгрузки с помощью libpcap - PullRequest
1 голос
/ 14 января 2011

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

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

Мои вопросы:

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

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

Ответы [ 3 ]

2 голосов
/ 14 января 2011

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

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

1 голос
/ 14 января 2011

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

0 голосов
/ 14 января 2011

Попробуйте tcpdump

...