zoukankan      html  css  js  c++  java
  • 监控linux流量python版

    python版监控linux流量

    直接上代码,使用OptionParser来传入参数

    #coding:utf-8
    #-------------
    #Author:Hu
    #Data:20150520
    #-------------
    
    from __future__ import division
    import re
    import time
    from optparse import OptionParser
    
    
    def getbandwidth(eth='eth0',intevel=1):
        a=open('/proc/net/dev')
        data=a.read()
        patten=eth + '.*'
        if  not re.search(patten,data):
            print "The ETHname not have"
            exit(1)
        Rev_old=re.search(patten,data).group().replace(':',' ').split()[1]
        Send_old=re.search(patten,data).group().replace(':',' ').split()[9]
        a.close()
    
        while True:
            #print intevel
            time.sleep(int(intevel))
            a=open('/proc/net/dev')
            data=a.read()
            Rev=re.search(patten,data).group().replace(':',' ').split()[1]
            Send=re.search(patten,data).group().replace(':',' ').split()[9]
            diff_Rev=int(Rev)-int(Rev_old)
            diff_Sen=int(Send)-int(Send_old)
            diff_M=diff_Rev*8/1024/1024/int(intevel)
            diff_S=diff_Sen*8/1024/1024/int(intevel)
            print time.strftime("%Y%m%d %H:%M:%S") + '   The Recevie is  %6.2f Mbps(byte is %d)' % (diff_M,diff_Rev) + '   The Send is  %6.2f Mbps(byte is %d)' % (diff_S,diff_Sen)
            Rev_old=Rev
            Send_old=Send
            a.close()
    if __name__=='__main__':
        
        import sys
        usage='''%prog [-i ethname] [-t interveltime]
               Example:%prog -i eth0 -t 1'''
        parser=OptionParser(usage=usage,version='2.0_20150602')
    
        parser.add_option('-i','--interface',dest='interface',default='eth0',help='Wann to interface')
        parser.add_option('-t','--time',dest='intevel',type='int',default='1',help='The intevel time')
        (options,args)=parser.parse_args()
        print "The interafce is %s and the intevel time is %d" % (options.interface,options.intevel)
        getbandwidth(options.interface,options.intevel)

    使用方法:

    '''%prog [-i ethname] [-t interveltime]
               Example:%prog -i eth0 -t 1'''
    默认是eth0 ,时间间隔是1

    效果如下:
    [root@iZ94nv1rj5tZ tools]# ./bandwidth3.py -version
    Usage: bandwidth3.py [-i ethname] [-t interveltime]
               Example:bandwidth3.py -i eth0 -t 1
    
    bandwidth3.py: error: no such option: -v
    [root@iZ94nv1rj5tZ tools]# ./bandwidth3.py -i eth1 -t 1
    The interafce is eth1 and the intevel time is 1
    20151113 16:51:43   The Recevie is    0.01 Mbps(byte is 1876)   The Send is    0.00 Mbps(byte is 154)
    20151113 16:51:44   The Recevie is    0.02 Mbps(byte is 2156)   The Send is    0.00 Mbps(byte is 202)
    20151113 16:51:45   The Recevie is    0.08 Mbps(byte is 10482)   The Send is    0.00 Mbps(byte is 202)
    20151113 16:51:46   The Recevie is    0.02 Mbps(byte is 2014)   The Send is    0.00 Mbps(byte is 202)
    20151113 16:51:47   The Recevie is    0.02 Mbps(byte is 2612)   The Send is    0.00 Mbps(byte is 202)
    20151113 16:51:48   The Recevie is    0.09 Mbps(byte is 11394)   The Send is    0.00 Mbps(byte is 202)
    

    2016-01-08 更新:

    最新在centos 7中测试时,发现centos的网卡与6的有点不一样,如下:

    [root@localhost tools]# cat /proc/net/dev
    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
      eno3:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eno4:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eno5:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    enp0s29u1u1u5:   59304    2097    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      eth2: 534252412  394444    0   56    0     0          0         0 117712356  277855    0    0    0     0       0          0
        lo:    2808      27    0    0    0     0          0         0     2808      27    0    0    0     0       0          0
    virbr0-nic:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
    virbr0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

    centos 6如下:

    [root@localhost tools]# cat /proc/net/dev
    Inter-|   Receive                                                |  Transmit
     face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
        lo:940478306 9822773    0    0    0     0          0         0 940478306 9822773    0    0    0     0       0          0
      eth0:892682633544 786583176    0    0    0     0          0   7086639 138419689066 361042275    0    0    0     0       0          0
      eth1:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
      usb0:88358010 1359354    0    0    0     0          0         0      438       5    0    0    0     0       0          0

    与老版的linux有区别,centos 7网卡名后有空格,但centos 6以下的网卡名后没空格。

    所以,如果该脚步要在7中使用,要将
    Send_old=re.search(patten,data).group().replace(':',' ').split()[9]
    改成:
    Send_old=re.search(patten,data).group().replace(':',' ').split()[10]
    即可。


    如有问题,请联系362299908@qq.com
  • 相关阅读:
    【pycharm 密钥】pycharm 2017 密钥
    【jenkins 忘记密码】忘记Jenkins管理员密码的解决办法
    【git 报错】Could not read from remote repository.Please make sure you have the correct access rights.
    【pycharm 警告】unittest RuntimeWarning: Parent module ” not found while handling absolute import
    【python接口自动化测试教程】00---00章节就代表开篇吧
    【python-strip】Python strip()方法
    认识map-reduce
    subprocess实用手册
    k8s学习路线
    nginx小知识
  • 原文地址:https://www.cnblogs.com/landhu/p/4961192.html
Copyright © 2011-2022 走看看