Linux: recuperar por interface enviados / contadores de pacotes recebidos (ethernet, IPv4, IPv6)
-
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.
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
Você pode facilmente fazer isso em C # no MonoDevelop:
using System.Net.NetworkInformation;
foreach (NetworkInterface ni in interfaces)
{
// perform your calculations
}