Linux中的实时RX和TX速率

2 投票
3 回答
2829 浏览
提问于 2025-04-15 12:52

我想找一种方法,可以在Linux系统中通过编程的方式监控实时的IP流量。我的需求不是统计总流量,而是想知道当前正在使用的带宽。我希望找到一个类似于OS X系统中istat菜单的网络流量监控工具,但不需要图形界面。

我觉得应该有这样的工具,但我不知道具体在哪里找,而且我不想重新发明轮子。

这是不是只需要监控一个套接字就行?还是说我需要一个能帮我处理很多复杂事情的工具?

3 个回答

0

你可以使用以下的 dstat 命令来获取网络的吞吐量和数据包的数量:

dstat -n --net-packets -f 10

如果你想监控特定的网络接口,可以这样做:

dstat -n --net-packets -N eth0,wlan0 10

如果你更喜欢以传统的 每秒比特数 的方式输出数据,可以使用:

dstat -n --net-packets -N eth0,wlan0 --bits 10

这个命令会给你提供10秒的平均值。如果你想把这些数据写出来方便后续处理,可以使用以下命令导出为CSV文件:

dstat -n --net-packets -N eth0,wlan0 --bits 10

dstat自带了很多插件,可以将这些指标与系统中的其他指标关联起来。如果你需要自定义数据或监控特定的内容,它还允许你添加自己的(用python写的)插件。

1

我使用一个叫做 dstat 的小程序。它把很多类似“统计”的功能合并成一个快速的输出,使用起来非常灵活。它不仅能告诉你当前的网络流量,还有很多其他的信息。

在Linux系统中,程序 netstat 可以提供原始的网络统计数据。你可以自己解析这些数据,得到有用的信息(这正是dstat所做的事情)。

9

在 /proc/net/dev 这个地方,我们可以看到字节和数据包的计数器,所以:

import time

last={}

def diff(col): return counters[col] - last[iface][col]

while True:
  print "\n%10s: %10s %10s %10s %10s"%("interface","bytes recv","bytes sent", "pkts recv", "pkts sent")
  for line in open('/proc/net/dev').readlines()[2:]:
    iface, counters = line.split(':')
    counters = map(int,counters.split())
    if iface in last:
      print "%10s: %10d %10d %10d %10d"%(iface,diff(0), diff(8), diff(1), diff(9))

    last[iface] = counters

  time.sleep(1)

撰写回答