Назад | Перейти на главную страницу

Как собрать краткую статистику трафика на linux?

Мне нужна статистика, разделенная по периодам времени, например:

time_1 - time_1 + 5mins
from_ip1 > to_ip2  total_packages_size1
from_ip3 > to_ip4  total_packages_size2

time_1 + 5mins - time_1 + 10mins
from_ip1 > to_ip2  total_packages_size3
from_ip5 > to_ip6  total_packages_size4
...

я смотрел на tcpdump, и я знаю, как с его помощью получить необобщенную статистику. Но я действительно не хочу создавать инструмент, который обрабатывает журналы tcpdump, а затем очищает их. Для решения этой стандартной проблемы должен быть готовый инструмент.

Я стараюсь делать это с помощью правил учета в iptables. Я создаю настраиваемое правило аудита

iptables -N GKT-AUDIT

Затем я отправляю весь входящий трафик, в данном случае OUTPUT цепочка, через это правило прежде всего

iptables -I OUTPUT 1 -j GKT-AUDIT

Затем я ввожу правила без целей в GKT-AUDIT цепь

iptables -A GKT-AUDIT -s 5.5.5.1 -d 7.7.7.2
iptables -A GKT-AUDIT -s 5.5.5.3 -d 7.7.7.4

и так далее. Поскольку у этих правил нет целей, соответствующие пакеты не завершаются, а продолжаются через GKT-AUDIT цепи, затем выпадет конец и вернитесь к OUTPUT цепочка, поэтому правила не влияют на поток данных. Но пакеты делать увеличивать количество пакетов в соответствии с правилами сопоставления по мере их прохождения, так что я могу нарезать и нарезать свой трафик любым удобным мне способом на статистической основе. Затем я обычно собираю их Мунин плагин, и у munin есть график их, но это уточнение, которое может вам подойти, а может и не подойти.

Преимущество использования iptables заключается в том, что он может разрезать трафик множеством разных способов, поэтому я могу очень точно определить, какой трафик соответствует любому конкретному правилу: если я хочу подсчитывать только пакеты с определенного адреса на определенный другой адрес, но только в определенном диапазоне исходных портов, и тогда только если это часть соединения, которое передало более 10 МБ, я могу это сделать.

Какая у вас внутренняя сетевая инфраструктура? Netflow в значительной степени создан именно для описываемого вами варианта использования. Он был разработан Cisco, но доступен на большинстве коммутаторов более высокого уровня.

Если вам нужно сделать это на уровне хоста, это звучит как работа для ntop. Я не думаю, что его отчеты становятся настолько инкрементными, насколько вы хотите, но вы, вероятно, можете подключиться к его Python API, чтобы получить то, что хотите.

Не знаю, поможет ли это вам, но, возможно, стоит посмотреть.

Вы можете импортировать необработанные файлы tcpdump в wirehark, это довольно хороший инструмент. Не уверен, что можно использовать итоговые файлы.

С уважением, jgr