Linux: получить счетчики отправленных / полученных пакетов для каждого интерфейса (ethernet, ipv4, ipv6) - PullRequest
11 голосов
/ 08 декабря 2008

В Linux как (программно) получить следующие счетчики для каждого интерфейса :

  • Отправленные / полученные кадры Ethernet,
  • Отправленные / полученные пакеты IPv4,
  • Отправленные / полученные пакеты IPv6.

Ответы [ 10 ]

21 голосов
/ 09 декабря 2008

В моей системе есть файлы под /sys/class/net/eth0/statistics, которые предоставляют различные статистические данные о сетевых интерфейсах.

Предполагается, что в Linux недавно установлен смонтированный /sys (sysfs).

9 голосов
/ 04 февраля 2009
cat /proc/net/dev

Должен содержать счетчики, статистику и информацию.

7 голосов
/ 08 декабря 2008

Вы должны быть в состоянии сделать это, используя iptables правила и счетчики пакетов, например,

# 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

И чтобы просмотреть статистику, проанализируйте вывод этих данных:

iptables -L -vxn
ip6tables -L -vxn

Вы также должны посмотреть флаг -Z, когда хотите сбросить счетчики.

4 голосов
/ 08 декабря 2008

Вы всегда можете разобрать различные файлы состояния ядра самостоятельно, я думаю, что именно такие инструменты, как netstat делают.

Справочная страница предлагает:

  • /proc/net/raw - информация о сокете RAW
  • /proc/net/tcp - информация о сокете TCP
  • /proc/net/udp - информация о сокете UDP

Полагаю, должен быть внепроцессный способ сделать это, возможно, тоже в /sys? Я быстро взглянул, но ничего не нашел.

2 голосов
/ 08 декабря 2008

ifconfig сообщает количество переданных данных (байтов и пакетов).

2 голосов
/ 08 декабря 2008

Либо просто проанализируйте вывод netstat -i. Или strace netstat -i, и используйте это, чтобы определить, где он ищет информацию.

1 голос
/ 24 февраля 2015

Вы можете распечатать полную статистику Ethernet с помощью ethtool : ethtool -S eth1

1 голос
/ 08 мая 2014

Следующие команды дают статистику ipv4 / ipv6, поддерживаемую в масштабе всей системы:

netstat --statistics

nstat -z

cat /proc/net/dev_snmp6/eth0  gives ipv6 stats per interface
0 голосов
/ 19 мая 2015

Вы можете легко сделать это в C # в monodevelop:

using System.Net.NetworkInformation;

foreach (NetworkInterface ni in interfaces)
{
  // perform your calculations
}
0 голосов
/ 08 декабря 2008

Wireshark (раньше был Ethereal) может помочь вам в этом.

Netstat будет моим вторым предположением

...