Linux: извлекает каждый отправленный/принимаемый счетчик пакетов (ethernet, ipv4, ipv6)

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

  • Отправленные/принятые ракеты Ethernet,
  • Отправленные/принятые пакеты IPv4,
  • Отправленные/принятые пакеты IPv6.

Ответ 1

Вы должны сделать это, используя правила 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, если хотите reset счетчики.

Ответ 2

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

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

Ответ 3

cat /proc/net/dev

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

Ответ 4

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

На странице руководства предлагается:

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

netstat --statistics

nstat -z

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

Ответ 8

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

Ответ 9

Wireshark (используется для Ethereal) может помочь вам в этом.

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

Ответ 10

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

using System.Net.NetworkInformation;

foreach (NetworkInterface ni in interfaces)
{
  // perform your calculations
}