monatliche Netzwerkstatistikgruppe nach IP-Adresse

363
neoedmund

Wie bekomme ich monatliche Netzwerkstatistiken per IP-Adresse auf meinem Linux-Router?

Ich habe einen Linux-Router zu Hause und möchte monatlich nach IP-Adressenpaaren gruppierte Netzwerkstatistikinformationen erhalten:

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

Ich bevorzuge freie Software und verbiete nicht, selbst etwas zu entwickeln. Ich fand, dass ich TUN / TAP oder libpcap verwenden konnte, um Pakete zu erhalten. Aber wenn ich an die Performance und die Synchronisation der Prozesse denke, brauche ich einen Vorschlag.

Vielen Dank.

0
Gibt es nicht schon so etwas wie Nethogs oder iptraf dafür? grawity vor 7 Jahren 0

2 Antworten auf die Frage

0
Ipor Sircer

Verwenden Sie reine iptables.

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

Schreiben Sie dann ein Skript, das mithilfe von iptables die Zähler von netfilter liest.

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  

Und setze dieses Skript auf /etc/cron.monthly/.

Entsprechend der Beispielausgabe der ursprünglichen Frage möchten sie die Quelle und das Ziel verfolgen, die Ihre Methoden nicht ausführen. Auch das Hinzufügen von iptables-Einträgen für jede mögliche IP-Adresse würde die Leistung beeinträchtigen. cybernard vor 7 Jahren 0
0
cybernard
ipset create track_hosts hash:net,net family inet hashsize 262144 maxelem 333000 counters comment 

Wenn Sie in einem Monat keine Einträge mehr haben, erhöhen Sie die Zahl auf 333000.

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

Sie können auch -i eth0 zwischen 1 und -j hinzufügen, um sie auf 1 Netzwerkadapter zu beschränken.


ipset save track_host 

wird sofort Ergebnisse haben

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 

Statistiken sind nicht gut, wenn sie nicht zwischen Neustarts gespeichert werden.

Wenn Ihr Router über systemd verfügt: Beachten Sie, dass der Dateipfad Ihren Bedürfnissen entspricht -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 

Bitte ändern Sie zuerst den Pfad. Das Wiederherstellen von iptables kann auf diese Weise erfolgen

[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 

Jetzt bleibt alles in einem Cronjob übrig

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

Die erste Hälfte speichert die Statistiken, und die zweite Hälfte löscht sie, um den neuen Monat von vorne zu beginnen. Natürlich müssen Sie nicht spülen, wenn Sie nicht möchten.

Sie können die Ausgabe so analysieren, wie Sie es möchten.

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].//' 

Das Endergebnis:

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