Python脚本实现网卡流量监控


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

Python 相关文章推荐
Python 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
详解django中使用定时任务的方法
Sep 27 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
PyCharm 专业版安装图文教程
Feb 20 Python
python实现微信打飞机游戏
Mar 24 Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 Python
python获取命令行参数实例方法讲解
Nov 02 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 #Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 #Python
Python压缩和解压缩zip文件
Feb 14 #Python
Python简单日志处理类分享
Feb 14 #Python
Python魔术方法详解
Feb 14 #Python
Python中非常实用的一些功能和函数分享
Feb 14 #Python
深入理解Python中的元类(metaclass)
Feb 14 #Python
You might like
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
php缓冲输出实例分析
2015/01/05 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
Div自动滚动到末尾的代码
2008/10/26 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
Vue2.0如何发布项目实战
2017/07/27 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
pandas表连接 索引上的合并方法
2018/06/08 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
django实现将修改好的新模型写入数据库
2020/03/31 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
项目经理的岗位职责
2013/11/23 职场文书
优秀教师主要事迹
2014/02/01 职场文书
营销团队口号
2014/06/06 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
Python实现日志实时监测的示例详解
2022/04/06 Python