linux中的实时接收和发送速率

2024-10-05 12:21:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在寻找一种在linux下以编程方式(无论是调用库还是独立程序)监视实时ip流量的方法。我不要总数,我要的是当前正在使用的带宽。我在找一个类似于OSX的istat菜单的网络流量监视器的工具。在

我相当确定这样的事情确实存在,但我不确定该去哪里看,我宁愿不必重新发明轮子。在

它是否像监视套接字一样简单?或者我需要一个工具来处理我的大量开销?在


Tags: 工具方法iplinux编程方式菜单事情
3条回答

我使用一个名为^{}的小程序,它将许多类似“stat”的函数组合成1个快速输出。非常可定制。它将为您提供当前的网络吞吐量以及更多。在

在linux中,netstat程序将给您原始的网络统计信息。您可以自己解析这些统计信息以生成有意义的输出(dstat就是这样做的)。在

您可以使用以下dstat命令获得网络吞吐量和数据包计数:

dstat -n  net-packets -f 10

或者,如果要监视特定接口,可以执行以下操作:

^{pr2}$

如果您喜欢更传统的bits per second输出:

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

这将为您提供10秒的平均值。如果您希望将其写出来进行后期处理,可以使用以下方法导出到CSV文件:

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

Dstat附带了很多插件,可以将这些指标与系统中的其他指标关联起来,如果您需要自定义数据或监视特定于您的环境的内容,则可以灵活地添加自己的(python)插件。在

在/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)

相关问题 更多 >

    热门问题