【问题标题】:Linux: retrieve per-interface sent/received packet counters (ethernet, ipv4, ipv6)Linux:检索每个接口发送/接收的数据包计数器(以太网、ipv4、ipv6)
【发布时间】:2010-09-25 20:40:45
【问题描述】:

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

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

【问题讨论】:

  • 它可能在 /proc 中的某个地方,但作为一个快速而简单的方法,您可能会从“ifconfig”的输出中解析它
  • Paul,这仅适用于帧计数,因为 ifconfig 不提供每个 IP 协议的数据包计数。
  • xahtep 一针见血:很容易找到帧数。我也在寻找 IPv4 和 IPv6 数据包计数。

标签: linux networking ip


【解决方案1】:

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

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

【讨论】:

  • Fedora 14:这似乎是个很酷的想法,用于编写代表 RX /TX 的应用程序。 $ php cat /sys/class/net/eth0/statistics/tx_packets
  • 这些文件似乎包含以太网帧计数器,而不是 IP 相关的?! (我的印象是,这实际上与 /proc/net/devifconfig 的输出中包含的信息相同,只是它采用方便的“每个文件一个计数器”形式。
【解决方案2】:
cat /proc/net/dev

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

【讨论】:

    【解决方案3】:

    您应该能够使用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 标志以了解何时要重置计数器。

    【讨论】:

    • 听起来很有希望。你能详细说明和/或指向描述这一点的书/网站吗?另外,如果我想在生产系统上“一直”开启它,是否会对性能产生影响?
    • 我更新了答案以提供示例,希望对您有所帮助。这不会对性能造成任何明显影响,因为它只是在数据包流过时更新一些内存中的计数器。
    【解决方案4】:

    你总是可以自己解析各种内核状态文件,我想这就是netstat之类的工具所做的。

    手册页建议:

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

    我想应该有一种非 proc 方式来做到这一点,也许在/sys 中也是如此?我快速浏览了一下,但没有找到任何东西。

    【讨论】:

    • 我能找到的唯一相关内核状态文件是 /proc/dev/net。它报告每个接口的 RX-OK 和 TX-OK。我怀疑这些是以太网帧计数器。如何获得 IPv4 和 IPv6 数据包计数器?请注意,我正在寻找 itnerface 统计信息,而不是连接(套接字)统计信息。
    【解决方案5】:

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

    【讨论】:

    • netstat 报告每个接口的 RX-OK 和 TX-OK。我怀疑这些是以太网帧计数器。如何获得 IPv4 和 IPv6 数据包计数器?
    【解决方案6】:

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

    【讨论】:

    • ifconfig 报告每个接口的 RX 数据包和 TX 数据包。我怀疑这些是以太网帧计数器。如何获得 IPv4 和 IPv6 数据包计数器?
    • 不知道:/我没有 IPv6 系统,所以我不知道 ifconfig 在那里打印什么 :(
    【解决方案7】:

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

    netstat --statistics
    
    nstat -z
    
    cat /proc/net/dev_snmp6/eth0  gives ipv6 stats per interface
    

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

        Wireshark(以前是 Ethereal)可以帮助您。

        Netstat 是我的第二个猜测

        【讨论】:

        • 谢谢,但我正在寻找一种无需安装任何其他软件即可在“标准”Linux 系统上检索这些计数器的方法。
        • Netstat 应该预装在大多数 *nixes 中
        【解决方案10】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-12-26
          • 1970-01-01
          • 2012-12-14
          • 2018-04-15
          • 2021-06-14
          • 1970-01-01
          • 2015-02-17
          • 2015-05-04
          • 2011-09-13
          相关资源
          最近更新 更多