Linux: recupera contatori di pacchetti inviati / ricevuti per interfaccia (ethernet, ipv4, ipv6)

StackOverflow https://stackoverflow.com/questions/349576

  •  20-08-2019
  •  | 
  •  

Domanda

Su Linux, come posso recuperare (a livello di codice) i seguenti contatori in base all'interfaccia :

  • Frame ethernet inviati / ricevuti,
  • Pacchetti IPv4 inviati / ricevuti,
  • Pacchetti IPv6 inviati / ricevuti.
È stato utile?

Soluzione

Dovresti essere in grado di farlo utilizzando iptables regole e contatori di pacchetti, ad esempio

# 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

E per visualizzare le statistiche, analizza l'output di questi:

iptables -L -vxn
ip6tables -L -vxn

Dovresti anche cercare il -Z flag quando vuoi resettare i contatori.

Altri suggerimenti

Sul mio sistema, ci sono file in /sys/class/net/eth0/statistics, che forniscono varie statistiche sulle interfacce di rete.

Questo presuppone un Linux vagamente recente con /sys (sysfs) montato.

cat /proc/net/dev

Dovrebbe contenere contatori, statistiche e informazioni.

Puoi sempre analizzare tu stesso i vari file di stato del kernel, penso che sia quello che fanno strumenti come netstat.

La pagina man suggerisce:

  • /proc/net/raw - Informazioni socket RAW
  • /proc/net/tcp - Informazioni socket TCP
  • /proc/net/udp - Informazioni sul socket UDP

Suppongo che ci dovrebbe essere un modo non proc per farlo, forse anche in /sys? Ho dato una rapida occhiata ma non ho trovato nulla.

Analizza semplicemente l'output di netstat -i. Oppure strace netstat -i e utilizzalo per capire dove cerca le informazioni.

ifconfig indica la quantità di dati trasferiti (byte e pacchetti).

I seguenti comandi forniscono statistiche ipv4 / ipv6 mantenute a livello di sistema:

netstat --statistics

nstat -z

cat /proc/net/dev_snmp6/eth0  gives ipv6 stats per interface

Puoi stampare statistiche complete su Ethernet con ethtool : ethtool -S eth1

Wireshark (che prima era Ethereal) può aiutarti in questo.

Netstat sarebbe la mia seconda ipotesi

Puoi farlo facilmente in C # in monodevelop:

using System.Net.NetworkInformation;

foreach (NetworkInterface ni in interfaces)
{
  // perform your calculations
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top