网络编程
位置:首页>> 网络编程>> Python编程>> Python脚本实现网卡流量监控

Python脚本实现网卡流量监控

作者:junjie  发布时间:2022-11-27 11:36:51 

标签:Python,网卡,流量监控

#/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都限制流量,才搞了这个小脚本

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com