Linux中的实时RX和TX速率
我想找一种方法,可以在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)