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')为你想要的命令

上一篇:C#开发的简单端口转发程序的代码


下一篇:c语言多线程服务器