В Linux, как я могу (программно) получить следующие счетчики для каждого интерфейса:
- Отправленные/принятые ракеты Ethernet,
- Отправленные/принятые пакеты IPv4,
- Отправленные/принятые пакеты IPv6.
В Linux, как я могу (программно) получить следующие счетчики для каждого интерфейса:
Вы должны сделать это, используя правила 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 счетчики.
В моей системе есть файлы под /sys/class/net/eth0/statistics
, которые дают различные статистические данные о сетевых интерфейсах.
Это предполагает неопределенный недавний Linux, в котором установлен /sys
(sysfs).
cat /proc/net/dev
Должно содержать счетчики, статистику и информацию.
Вы всегда можете самостоятельно анализировать различные файлы состояния ядра, я думаю, что это такие инструменты, как netstat
.
На странице руководства предлагается:
/proc/net/raw
- информация о разъемах RAW/proc/net/tcp
- информация о сокетах TCP/proc/net/udp
- информация сокета UDPЯ предполагаю, что для этого не должно быть никакого способа, возможно, в /sys
тоже? Я быстро посмотрел, но ничего не нашел.
Либо просто проанализируйте вывод netstat -i
. Или strace netstat -i
, и используйте это, чтобы определить, где он ищет информацию.
ifconfig
указывает количество переданных данных (байты и пакеты).
Следующие команды дают статистику ipv4/ipv6 в общесистемной области:
netstat --statistics
nstat -z
cat /proc/net/dev_snmp6/eth0 gives ipv6 stats per interface
Вы можете распечатать полную статистику сети с помощью ethtool:
ethtool -S eth1
Wireshark (используется для Ethereal) может помочь вам в этом.
Netstat Было бы моим вторым предположением
Вы можете легко сделать это на С# в monodevelop:
using System.Net.NetworkInformation;
foreach (NetworkInterface ni in interfaces)
{
// perform your calculations
}