Linux: Abrufen per-Schnittstelle gesendete / empfangene Paketzähler (Ethernet, IPv4-, IPv6-)
-
20-08-2019 - |
Frage
Unter Linux, wie kann ich (programmatisch) rufen die folgenden Zähler auf einer Basis pro Schnittstelle :
- gesendete / empfangene Ethernet-Frames,
- gesendete / empfangene IPv4-Pakete,
- gesendete / empfangene IPv6-Pakete.
Lösung
Sie sollten der Lage sein, diese iptables
Regeln und Paketzähler tun verwenden, z.
# input and output must be accounted for separately
# ipv4, eth0
iptables -I INPUT -i eth0
iptables -I OUTPUT -o eth0
# ipv6, eth0
ip6tables -I INPUT -i eth0
ip6tables -I OUTPUT -o eth0
Und die Statistiken zu sehen, analysieren die Ausgabe von diesen:
iptables -L -vxn
ip6tables -L -vxn
Sie sollten auch die -Z
Flagge für nachschlagen, wenn Sie wollen die Zähler zurückgesetzt werden.
Andere Tipps
Auf meinem System gibt es Dateien unter /sys/class/net/eth0/statistics
, die verschiedenen Statistiken über Netzwerkschnittstellen gibt.
Dies ist eine vage aktuellen Linux unter der Annahme, die /sys
(sysfs) hat angebracht ist.
cat /proc/net/dev
Sollte enthalten Zähler, Statistiken und Informationen.
Sie können jederzeit analysieren die verschiedenen Kernel-Status-Dateien selbst, ich denke, das ist es, was Tools wie netstat
tun.
Der Mann Seite schlägt vor:
-
/proc/net/raw
- RAW-Socket Informationen -
/proc/net/tcp
- TCP-Socket-Informationen -
/proc/net/udp
- UDP-Socket Informationen
Ich denke, es sollte ein nicht-proc Weg, dies zu tun, vielleicht in /sys
auch? Ich hatte einen kurzen Blick aber nichts gefunden.
Entweder nur die Ausgabe von netstat -i
analysieren. Oder strace netstat -i
und Verwendung, die aus zu arbeiten, wo es für die Informationen sieht.
ifconfig
sagt Ihnen, die Menge der übertragenen Daten (Bytes und Pakete).
Die folgenden Befehle geben IPv4- / IPv6-Statistik beibehalten systemweit:
netstat --statistics
nstat -z
cat /proc/net/dev_snmp6/eth0 gives ipv6 stats per interface
Sie können volle Ethernet-Statistiken mit Drucken ethtool :
ethtool -S eth1
Sie können ganz einfach tun, dass in C # in monodevelop:
using System.Net.NetworkInformation;
foreach (NetworkInterface ni in interfaces)
{
// perform your calculations
}