python:查看linux网卡流量
短信预约 -IT技能 免费直播动态提醒
此脚本可列出一定时间的流量及平均流量。时间可自己设置。
#!/usr/bin/env python
import time,sys
def all_flow(INTERFACE):
f = open('/proc/net/dev')
flow_info=f.readlines()
in_flow=[]
out_flow=[]
for eth_dev in flow_info:
if INTERFACE in eth_dev:
in_flow.append(int(eth_dev.split(':')[1].split()[0]))
out_flow.append(int(eth_dev.split(':')[1].split()[9]))
f.close()
return in_flow,out_flow
def format_flow(flow):
flow_n = float(flow)
if flow_n > 1000000:
return '%.3f MB' % (flow_n/1024/1024)
else:
return '%.3f KB' % (flow_n/1024)
if __name__=='__main__':
if len(sys.argv) > 1:
INTERFACE = sys.argv[1]
else:
INTERFACE = 'eth'
in_flows = {}
out_flows = {}
all_flows0 = all_flow(INTERFACE)
count = 0
while count < 5:
time.sleep(1)
all_flows1=all_flow(INTERFACE)
for x in range(len(all_flows0[0])):
if len(sys.argv) >1:
curr_eth = INTERFACE
else:
curr_eth = 'eth%s' % x
if len(in_flows) == x:
in_flows[curr_eth]= []
out_flows[curr_eth]=[]
print curr_eth+" in:"+ format_flow(all_flows1[0][x]-all_flows0[0][x])+" out:"+\
format_flow(all_flows1[1][x]-all_flows0[1][x])
in_flows[curr_eth].append(all_flows1[0][x]-all_flows0[0][x])
out_flows[curr_eth].append(all_flows1[1][x]-all_flows0[1][x])
all_flows0 = all_flows1
count=count+1
for key in in_flows:
sum_a=0
in_flow=''
for i in in_flows[key]:
sum_a = sum_a+i
in_flow = in_flow + format_flow(i) + ' '
#print key + ' flow_in is: %s'% in_flow
print key +" average of flow_in is: %s" % format_flow(sum_a/count)
for key in out_flows:
sum_a=0
out_flow=''
for i in out_flows[key]:
sum_a = sum_a+i
out_flow = out_flow + format_flow(i) + ' '
#print key + ' flow_out is: %s'% out_flow
print key +" average of flow_out is: %s" % format_flow(sum_a/count)
默认为列出除lo以外的所有网卡的流量。也可在运行时加入网卡名作为参数如:eth0 或eth1等等。比较懒,没有做参数判断。也就是参数里输入任何字符串都不会报错,当然脚本运行获取的结果也就不会正确。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341