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

时间:2008-12-08 13:38:54

标签: linux networking ip

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

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

10 个答案:

答案 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)

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

Netstat这是我的第二次猜测

答案 9 :(得分:-1)

您可以在monodevelop中轻松地在C#中执行此操作:

using System.Net.NetworkInformation;

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