python监控网卡流量的代码举例

发布时间:2020-08-23编辑:脚本学堂
本文介绍下,用python监控网卡流量的代码一例,有需要的朋友,可以参考学习下。

代码如下:
 

复制代码 代码示例:

#get_net_info 
# -*- coding: cp936 -*- 

import re,time

def get_net_info():
    flow1 = open('/proc/net/dev')
    lines = flow1.read()
    flow1.close()
    e =  re.compile('(eth.)')
    r_re = re.compile('eth..(.*?s)')
    r_tr = re.compile(".*eth.*")
    match_re = r_re.findall(lines)
    match_tr = r_tr.findall(lines)
    eth = e.findall(lines)
    return (eth,lines,match_re,match_tr)

def net_flow():
    net_re_c={}
    net_tr_c={}   
    net_tr_a=[]
    for i in get_net_info()[3]:
        net_tr_a.append(i.split()[8])
    net_tr_a=dict(zip(get_net_info()[0],net_tr_a))
    net_re_a = dict(zip(get_net_info()[0],get_net_info()[2]))
    print "{eth0:(transmit,receive)"
    while True:               
        time.sleep(1)     
        net_re_b = dict(zip(get_net_info()[0],get_net_info()[2]))
        net_tr_b = []
        for i in get_net_info()[3]:
            net_tr_b.append(i.split()[8])
        net_tr_b=dict(zip(get_net_info()[0],net_tr_b))
        for i in net_re_b:
            net_re_c[i] = int((float(net_re_b[i])-float(net_re_a[i]))/1024)
        for i in net_tr_b: 
            net_tr_c[i]=int((float(net_tr_b[i])-float(net_tr_a[i]))/1024)
        net_re_a = net_re_b
        net_tr_a = net_tr_b
        net_flow={}
        for a in net_re_c:           
            net_flow[a]=(net_tr_c[a],net_re_c[a])
        print net_flow                                               
if __name__ == "__main__":
    net_flow()

以下是某网卡测试的显示效果 ethx:(发送流量,接收流量)
 

help {eth0:(transmit,receive)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (227, 6732)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (228, 6741)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (6, 5), 'eth0': (248, 7192)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (245, 7277)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (224, 6656)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (178, 5198)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (242, 7164)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (193, 5731)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (219, 6464)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (240, 7113)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (241, 7172)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (211, 6214)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (246, 7218)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (213, 6299)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (244, 7204)}
{'eth3': (0, 0), 'eth2': (0, 0), 'eth1': (0, 0), 'eth0': (226, 6600)}

以上代码的输出网卡流量结果,还是非常直观的,有兴趣的朋友,亲自测试下吧。