python:查看linux網卡流量

此腳本可列出一定時間的流量及平均流量。時間可自己設置。

#!/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等等。比較懶,沒有做參數判斷。也就是參數裏輸入任何字符串都不會報錯,當然腳本運行獲取的結果也就不會正確。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章