12

在 Linux 上,我如何(以编程方式)基于每个接口检索以下计数器:

  • 发送/接收以太网帧,
  • 发送/接收 IPv4 数据包,
  • 发送/接收 IPv6 数据包。
4

10 回答 10

22

在我的系统上,有一些文件/sys/class/net/eth0/statistics,其中提供了有关网络接口的各种统计信息。

这是假设最近/sys安装了(sysfs)的Linux。

于 2008-12-09T13:06:10.287 回答
10
cat /proc/net/dev

应包含计数器、统计数据和信息。

于 2009-02-04T13:24:32.903 回答
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您还应该在要重置计数器时查找标志。

于 2008-12-08T13:57:43.523 回答
3

您总是可以自己解析各种内核状态文件,我认为这就是工具喜欢netstat做的事情。

手册页建议:

  • /proc/net/raw-- 原始套接字信息
  • /proc/net/tcp-- TCP 套接字信息
  • /proc/net/udp-- UDP套接字信息

我想应该有一个非过程的方式来做到这一点,也许/sys也是?我快速浏览了一下,但什么也没找到。

于 2008-12-08T13:58:57.123 回答
2

要么只解析netstat -i. 或者strace netstat -i,并使用它来确定它在哪里查找信息。

于 2008-12-08T14:00:26.013 回答
2

ifconfig告诉您传输的数据量(字节和数据包)。

于 2008-12-08T14:03:59.487 回答
1

以下命令提供在系统范围内维护的 ipv4/ipv6 统计信息:

netstat --statistics

nstat -z

cat /proc/net/dev_snmp6/eth0  gives ipv6 stats per interface
于 2014-05-08T07:32:59.130 回答
1

您可以使用ethtool打印完整的以太网统计信息: ethtool -S eth1

于 2015-02-24T14:08:25.633 回答
0

Wireshark(曾经是 Ethereal)可以帮助你。

Netstat将是我的第二个猜测

于 2008-12-08T13:51:35.737 回答
-1

您可以在 monodevelop 的 C# 中轻松做到这一点:

using System.Net.NetworkInformation;

foreach (NetworkInterface ni in interfaces)
{
  // perform your calculations
}
于 2015-05-19T20:28:00.650 回答