Linux:检索每个接口发送/接收的数据包计数器(以太网,ipv4,ipv6)

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

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

Solutions Collecting From Web of "Linux:检索每个接口发送/接收的数据包计数器(以太网,ipv4,ipv6)"

你应该能够使用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标志。

在我的系统上,有/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套接字信息

我想应该有一个非proc的方式来做到这一点,也许在/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将是我的第二个猜测

你可以很容易地在C#中做monodevelop:

 using System.Net.NetworkInformation; foreach (NetworkInterface ni in interfaces) { // perform your calculations }