Python脚本实现网卡流量监控

时间:2021-07-26 10:13:02
  1. #/usr/bin/env/python 
  2. #coding=utf-8 
  3.   
  4. import sys,re,time,os 
  5. maxdata = 50000 #单位KB 
  6. memfilename = '/tmp/newnetcardtransdata.txt' 
  7. netcard = '/proc/net/dev' 
  8.   
  9. def checkfile(filename): 
  10.   if os.path.isfile(filename): 
  11.     pass 
  12.   else
  13.     f = open(filename, 'w'
  14.     f.write('0'
  15.     f.close() 
  16.   
  17. def get_net_data(): 
  18.   nc = netcard or '/proc/net/dev' 
  19.   fd = open(nc, "r"
  20.   netcardstatus = False 
  21.   for line in fd.readlines(): 
  22.     if line.find("eth0") > 0: 
  23.       netcardstatus = True 
  24.       field = line.split() 
  25.       recv = field[0].split(":")[1] 
  26.       recv = recv or field[1] 
  27.       send = field[8] 
  28.   if not netcardstatus: 
  29.     fd.close() 
  30.     print 'Please setup your netcard' 
  31.     sys.exit() 
  32.   fd.close() 
  33.   return (float(recv), float(send)) 
  34.   
  35. def monfirst(filename): 
  36.   nowtime = time.strftime('%m-%d %H:%M',time.localtime(time.time())) 
  37.   sec = time.localtime().tm_sec 
  38.   if nowtime == '01-01 00:00'
  39.     if sec < 10: 
  40.       f = open(filename, 'w'
  41.       f.write('0'
  42.       f.close()       
  43.   
  44. def net_loop(): 
  45.   (recv, send) = get_net_data() 
  46.   checkfile(memfilename) 
  47.   monfirst(memfilename) 
  48.   lasttransdaraopen = open(memfilename,'r'
  49.   lasttransdata = lasttransdaraopen.readline() 
  50.   lasttransdaraopen.close() 
  51.   totaltrans = int(lasttransdata) or 0 
  52.   while True: 
  53.     time.sleep(3) 
  54.     (new_recv, new_send) = get_net_data() 
  55.     recvdata = (new_recv - recv) / 1024 
  56.     senddata = (new_send - send) / 1024 
  57.     totaltrans += int(recvdata) 
  58.     totaltrans += int(senddata) 
  59.     memw = open(memfilename,'w'
  60.     memw.write(str(totaltrans)) 
  61.     memw.close() 
  62.     if totaltrans >= maxdata: 
  63.       os.system('init 0'
  64.   
  65. if __name__ == "__main__"
  66.   net_loop() 

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