сетевая статистика ежемесячная группа по IP-адресу

252
neoedmund

Как я могу получить статистику по сети ежемесячно по IP-адресу на моем роутере linux.

У меня дома есть роутер linux, и я хочу получать статистику по сети ежемесячно, сгруппированную по паре IP-адресов, например:

192.168.1.x -> x.x.x.x ??? Bytes  y.y.y.y1 -> 92.168.1.y ??? Bytes 

Я занимаюсь свободным программным обеспечением и не запрещаю заниматься разработкой самостоятельно. Я обнаружил, что могу использовать TUN / TAP или libpcap для получения пакетов. Но, думая о производительности и синхронизации процессов, мне нужно несколько предложений.

Спасибо.

0
Разве для этого уже нет ничего подобного Nethogs или iptraf? grawity 7 лет назад 0

2 ответа на вопрос

0
Ipor Sircer

Используйте чистые iptables.

iptables -A FORWARD -s 192.168.1.100 iptables -A FORWARD -s 192.168.1.101 ... 

Затем напишите скрипт, который читает счетчики из netfilter с использованием iptables.

iptables -L FORWARD -vxn  Chain FORWARD (policy ACCEPT 454 packets, 315224 bytes) pkts bytes target prot opt in out source destination  173 140480 all -- * * 1.2.3.4 0.0.0.0/0  

И поместите этот скрипт в /etc/cron.monthly/.

В соответствии с примером вывода оригинального вопроса, они хотят отслеживать источник и пункт назначения, что ваши методы не делают. Также добавление записей iptables для каждого возможного ip, которое они используют, снизит производительность. cybernard 7 лет назад 0
0
cybernard
ipset create track_hosts hash:net,net family inet hashsize 262144 maxelem 333000 counters comment 

Если у вас закончились записи в месяц, увеличьте число 333000 до большего.

iptables -t raw -I PREROUTING 1 -j SET --add-set track_hosts src,dst 

Вы также можете добавить -i eth0 между 1 и -j, чтобы ограничить его до 1 сетевого адаптера.


ipset save track_host 

сразу будет иметь результаты

add track_hosts 192.168.3.220,192.168.3.2 packets 1 bytes 60 add track_hosts 192.168.3.251,192.168.3.2 packets 1 bytes 1356 add track_hosts 192.168.3.248,233.89.188.1 packets 1 bytes 186 add track_hosts 192.168.3.222,192.168.3.2 packets 1 bytes 40 add track_hosts 192.168.3.248,239.255.255.250 packets 1 bytes 441 add track_hosts 192.168.3.249,255.255.255.255 packets 1 bytes 186 

Статистика не годится, если не сохраняется между перезагрузками.

Если на вашем маршрутизаторе установлен systemd: note, измените путь к файлу в соответствии с вашими потребностями -f /src/all.txt

[Unit] Description=IP sets for iptables After=ufw.service Before=network.target Before=iptables.service Before=webmin-iptables.service AssertPathExists=/src/all.txt  [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=-/bin/echo 'Loading ipset sets' ExecStart=/sbin/ipset restore -f /src/all.txt ExecStop=/sbin/ipset save -f /src/all.txt ExecStartPost=-/bin/echo 'Saving ipsets to disk' #ExecReload=/usr/libexec/ipset/ipset.start-stop reload # Save current ipset entries on stop/restart. # Value: yes|no, default: no # Saves all ipsets to /etc/sysconfig/ipset if ipset gets stopped Environment=IPSET_SAVE_ON_STOP=yes IPSET_SAVE_ON_RESTART=no ReadWriteDirectories=/src NoNewPrivileges=yes  [Install] WantedBy=basic.target 

Пожалуйста, сначала измените путь. Восстановление iptables можно сделать таким образом

[Unit] Description=IPtables load rules DefaultDependencies=no After=ipset.service network-pre.target Before=network-online.target network.target  [Service] Type=oneshot ExecStartPre=-/bin/echo 'Starting iptables' ExecStart=/usr/sbin/iptables-restore /etc/webmin/firewall/iptables.save ExecReload=/usr/sbin/iptables-restore /etc/webmin/firewall/iptables.save #ExecStop=/usr/lib/systemd/scripts/iptables-flush ExecStopPost=-/bin/echo 'Flushing iptables' RemainAfterExit=yes CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW  [Install] WantedBy=basic.target 

Теперь все, что осталось в cronjob для

ipset save -f /somewhere/month-year && ipset --flush track_hosts 

Первая половина сохраняет статистику, а вторая половина очищает их, чтобы начать новый месяц заново. Конечно, вам не нужно промывать, если вы не хотите.

Вы можете проанализировать вывод, как вы хотите, как это.

ipset save track_hosts|sed 's/.*track_hosts //'|sed 's/,/ -> /'|sed 's/packets [0-9].//' 

cat month-year|sed 's/.*track_hosts //'|sed 's/,/ -> /'|sed 's/packets [0-9].//' 

Конечные результаты:

192.168.3.220 -> 192.168.3.2 bytes 60 192.168.3.2 -> 239.255.255.253 bytes 105 192.168.3.251 -> 192.168.3.2 bytes 1356 192.168.3.248 -> 233.89.188.1 bytes 186 192.168.3.222 -> 192.168.3.255 bytes 78 216.17.8.11 -> 192.168.3.2 bytes 40 192.168.3.222 -> 192.168.3.2 bytes 40 

Похожие вопросы