在Linux上,我如何(以编程方式)基于每个接口检索以下计数器 :
答案 0 :(得分:21)
在我的系统上,/sys/class/net/eth0/statistics
下有文件,提供有关网络接口的各种统计信息。
这假设一个模糊的Linux最近安装了/sys
(sysfs)。
答案 1 :(得分:9)
cat /proc/net/dev
应包含计数器,统计信息和信息。
答案 2 :(得分:7)
您应该能够使用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
标志处查找要重置计数器的时间。
答案 3 :(得分:4)
您总是可以自己解析各种内核状态文件,我认为这就像netstat
这样的工具。
手册页建议:
/proc/net/raw
- RAW套接字信息/proc/net/tcp
- TCP套接字信息/proc/net/udp
- UDP套接字信息我想应该有一个非过程方式来做这件事,也许在/sys
也是如此?我看了一眼,但没有找到任何东西。
答案 4 :(得分:2)
要么只解析netstat -i
的输出。或strace netstat -i
,并使用它来确定查找信息的位置。
答案 5 :(得分:2)
ifconfig
告诉您传输的数据量(字节和数据包)。
答案 6 :(得分:1)
以下命令提供系统范围内维护的ipv4 / ipv6统计信息:
netstat --statistics
nstat -z
cat /proc/net/dev_snmp6/eth0 gives ipv6 stats per interface
答案 7 :(得分:1)
您可以使用 ethtool 打印完整的以太网统计信息:
ethtool -S eth1
答案 8 :(得分:0)
答案 9 :(得分:-1)
您可以在monodevelop中轻松地在C#中执行此操作:
using System.Net.NetworkInformation;
foreach (NetworkInterface ni in interfaces)
{
// perform your calculations
}