Python脚本实现网卡流量监控

1173次阅读  |  发布于5年以前

    #/usr/bin/env/python
    #coding=utf-8

    import sys,re,time,os
    maxdata = 50000 #单位KB
    memfilename = '/tmp/newnetcardtransdata.txt'
    netcard = '/proc/net/dev'

    def checkfile(filename):
      if os.path.isfile(filename):
        pass
      else:
        f = open(filename, 'w')
        f.write('0')
        f.close()

    def get_net_data():
      nc = netcard or '/proc/net/dev'
      fd = open(nc, "r")
      netcardstatus = False
      for line in fd.readlines():
        if line.find("eth0") > 0:
          netcardstatus = True
          field = line.split()
          recv = field[0].split(":")[1]
          recv = recv or field[1]
          send = field[8]
      if not netcardstatus:
        fd.close()
        print 'Please setup your netcard'
        sys.exit()
      fd.close()
      return (float(recv), float(send))

    def monfirst(filename):
      nowtime = time.strftime('%m-%d %H:%M',time.localtime(time.time()))
      sec = time.localtime().tm_sec
      if nowtime == '01-01 00:00':
        if sec < 10:
          f = open(filename, 'w')
          f.write('0')
          f.close()      

    def net_loop():
      (recv, send) = get_net_data()
      checkfile(memfilename)
      monfirst(memfilename)
      lasttransdaraopen = open(memfilename,'r')
      lasttransdata = lasttransdaraopen.readline()
      lasttransdaraopen.close()
      totaltrans = int(lasttransdata) or 0
      while True:
        time.sleep(3)
        (new_recv, new_send) = get_net_data()
        recvdata = (new_recv - recv) / 1024
        senddata = (new_send - send) / 1024
        totaltrans += int(recvdata)
        totaltrans += int(senddata)
        memw = open(memfilename,'w')
        memw.write(str(totaltrans))
        memw.close()
        if totaltrans >= maxdata:
          os.system('init 0')

    if __name__ == "__main__":
      net_loop()

用ROOT权限运行,maxdata为最大流量限制 超过这个限制,系统自动关机 当然,你可以改os.system('init 0')为你想要的命令 主要是现在VPS都限制流量,才搞了这个小脚本

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8