Linux: recupera contadores de paquetes enviados / recibidos por interfaz (ethernet, ipv4, ipv6)

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

  •  20-08-2019
  •  | 
  •  

Pregunta

En Linux, ¿cómo puedo (programáticamente) recuperar los siguientes contadores por interfaz :

  • Tramas de Ethernet enviadas / recibidas,
  • Paquetes IPv4 enviados / recibidos,
  • Paquetes IPv6 enviados / recibidos.
¿Fue útil?

Solución

Debería poder hacerlo utilizando iptables reglas y contadores de paquetes, por ejemplo

# 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

Y para ver las estadísticas, analice el resultado de estas:

iptables -L -vxn
ip6tables -L -vxn

También debe buscar la bandera -Z cuando desee restablecer los contadores.

Otros consejos

En mi sistema, hay archivos debajo de /sys/class/net/eth0/statistics, que ofrecen varias estadísticas sobre las interfaces de red.

Esto supone un Linux vagamente reciente que ha montado /sys (sysfs).

cat /proc/net/dev

Debe contener contadores, estadísticas e información.

Siempre puede analizar los diversos archivos de estado del núcleo usted mismo, creo que esto es lo que hacen las herramientas como netstat.

La página del manual sugiere:

  • /proc/net/raw - Información del socket RAW
  • /proc/net/tcp - Información del socket TCP
  • /proc/net/udp - Información del socket UDP

Supongo que debería haber una forma no proc de hacer esto, ¿quizás también en /sys? Eché un vistazo rápido pero no encontré nada.

O simplemente analiza la salida de netstat -i. O strace netstat -i, y úselo para averiguar dónde busca la información.

ifconfig le indica la cantidad de datos transferidos (bytes y paquetes).

Los siguientes comandos dan estadísticas de ipv4 / ipv6 mantenidas en todo el sistema:

netstat --statistics

nstat -z

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

Puede imprimir estadísticas completas de Ethernet con ethtool : ethtool -S eth1

Wireshark (solía ser Etéreo) puede ayudarlo con eso.

Netstat sería mi segunda suposición

Puede hacerlo fácilmente en C # en monodevelop:

using System.Net.NetworkInformation;

foreach (NetworkInterface ni in interfaces)
{
  // perform your calculations
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top