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 相关文章推荐
记录Django开发心得
Jul 16 Python
python自定义异常实例详解
Jul 11 Python
关于Python 3中print函数的换行详解
Aug 08 Python
numpy.linspace函数具体使用详解
May 27 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
Python 共享变量加锁、释放详解
Aug 28 Python
python日志模块logbook使用方法
Sep 19 Python
numpy np.newaxis 的实用分享
Nov 30 Python
Python3 集合set入门基础
Feb 10 Python
Python通过4种方式实现进程数据通信
Mar 12 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
总结python 三种常见的内存泄漏场景
Nov 20 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
php修改时间格式的代码
2011/05/29 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
python利用socketserver实现并发套接字功能
2018/01/26 Python
使用Python进行目录的对比方法
2018/11/01 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
详解Anaconda 的安装教程
2020/09/23 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
网络事业创业计划书范文
2014/01/09 职场文书
大学自我评价
2014/02/12 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
大学生团日活动总结
2015/05/06 职场文书