Linux: recuperar por interface enviados / contadores de pacotes recebidos (ethernet, IPv4, IPv6)

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

  •  20-08-2019
  •  | 
  •  

Pergunta

No Linux, como posso (programaticamente) recuperar os seguintes contadores em uma base por interface :

  • quadros enviados / Ethernet recebida,
  • Sent / pacotes IPv4 recebidas,
  • enviadas / recebidas pacotes IPv6.
Foi útil?

Solução

Você deve ser capaz de fazer isso usando regras iptables e contadores de pacotes, e.

# 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 para ver as estatísticas, analisar a saída destes:

iptables -L -vxn
ip6tables -L -vxn

Você também deve olhar para cima a bandeira -Z para quando você deseja redefinir os contadores.

Outras dicas

No meu sistema, existem arquivos sob /sys/class/net/eth0/statistics, que dá várias estatísticas sobre interfaces de rede.

Isso supõe um Linux vagamente recente que tem /sys (sysfs) montado.

cat /proc/net/dev

Deve conter contadores, estatísticas e informações.

Você pode sempre analisar os vários arquivos de status do kernel mesmo, eu acho que é isso que ferramentas como netstat fazer.

A página man sugere:

  • /proc/net/raw - RAW informações de soquete
  • /proc/net/tcp - informações sobre o soquete TCP
  • /proc/net/udp - UDP tomada informações

Eu acho que deve haver uma maneira não-proc para fazer isso, talvez em /sys também? Eu tinha um olhar rápido, mas não encontrou nada.

De qualquer apenas analisar a saída de netstat -i. Ou strace netstat -i, e usar isso para descobrir onde ele olha para a informação.

ifconfig informa a quantidade de dados transferidos (bytes e pacotes).

A seguir comandos dar IPv4 / IPv6 estatísticas mantida em todo o sistema:

netstat --statistics

nstat -z

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

Você pode imprimir as estatísticas Ethernet completas com ethtool : ethtool -S eth1

Wireshark (costumava ser Ethereal) pode ajudá-lo com isso.

Netstat seria minha segunda suposição

Você pode facilmente fazer isso em C # no MonoDevelop:

using System.Net.NetworkInformation;

foreach (NetworkInterface ni in interfaces)
{
  // perform your calculations
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top