python流量监控_用python中的pcapy实现网络流量监控
我写了一个简单的网络流量监视器来获得B/s和/或总数据传输率(B)。然而,当我用ftp(使用Total Commander)传输一个文件来测试它时,我不能让它把Total transfer作为文件大小来衡量。它总是比实际尺寸小得多。
我不确定我是不是做错了什么。。
我设置的BPF过滤器是dst
下面是我的源代码:import threading
import sys
import pcapy
import time
import logging as logger
class NetMonitor(threading.Thread):
_timeout = 1
@classmethod
def get_net_interfaces(cls):
return pcapy.findalldevs()
def __init__(self, device, bpf_filter):
threading.Thread.__init__(self)
self.active = True
self._net_monitor = pcapy.open_live(device, 65535, 0, 1000) #self.timeout * 1000)
self._net_monitor.setfilter(bpf_filter)
#self.dumper = self.net_monitor.dump_open("pkt_dump.txt")
self._current_bytes_rate = 0
self.total_transfer = 0 # total number of Bytes transfered
#
self._tmp_bytes_per_sec_sum = 0 # sums up B/s values from each dispatch iteration (eventually used to calc average value)
self._inc = 0 # number of dispatch iterations (eventually used to calc average B/s value)
#--->
self._dispatch_bytes_sum = 0 # sums up packets size for one dispatch call
def __handle_packet(self, header, data):
# method is called for each packet by dispatch call (pcapy)
self._dispatch_bytes_sum += len(data) #header.getlen() #len(data)
#logger.debug("h: ({}, {}, {}), d:{}".format(header.getlen(), header.getcaplen(), header.getts(), len(data)))
#self.dumper.dump(header, data)
def update(self):
self._dispatch_bytes_sum = 0
# process packets
packets_nr = self._net_monitor.dispatch(-1, self.__handle_packet)
self.total_transfer += self._dispatch_bytes_sum
self._inc += 1
self._current_bytes_rate = self._dispatch_bytes_sum # add single dispatch B/s -> timeout is 1 s
self._tmp_bytes_per_sec_sum += self._current_bytes_rate
logger.debug('inc:{}, current rate: {} B/s, avg rate: {} B/s, total:{} B'.format(self._inc, self.current_rate, self.avg_rate, self.total_transfer))
return self._current_bytes_rate, packets_nr
def get_avg_bytes_rate(self):
if self._inc:
return self._tmp_bytes_per_sec_sum / self._inc
else:
return 0
def get_current_bytes_rate(self):
return self._current_bytes_rate
def run(self):
while(self.active):
self.update()
time.sleep(self._timeout)
# average B/s rate
avg_rate = property(get_avg_bytes_rate)
# current B/s rate
current_rate = property(get_current_bytes_rate)
if __name__ == '__main__':
filter = ' '.join(sys.argv[2:])
print filter
#nm0 = NetMonitor(pcapy.findalldevs()[0], filter)
nm1 = NetMonitor(pcapy.findalldevs()[1], filter)
nm1.start()
start_time = time.time()
while time.time() - start_time < int(sys.argv[1]):
print "current {} B/s, avg {} B/s, total transfer {} B".format(nm1.current_rate, nm1.avg_rate, nm1.total_transfer)
time.sleep(1)
nm1.active = False
nm1.join()
print "++++++ total: {}, avg: {}".format(nm1.total_transfer, nm1.avg_rate)
任何建议都非常感谢。
干杯。
python流量监控_用python中的pcapy实现网络流量监控相关推荐
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- 舆情监控和应急处理方案,如何做好网络舆情监控?
舆情监控是指通过不同的渠道,如社交媒体.新闻媒体.博客.论坛等,对公众的言论进行收集.分析.评估和反馈的过程.舆情监控的目的是帮助企业或组织了解公众的观点和情绪,并且能够及时做出回应,避免可能出现的舆 ...
- python系统监控_使用Python监控Linux系统
阅读目录 一.Python编写的监控工具 一.多功能系统资源统计工具dstat 1.dstat介绍 dstat是一个用Python语言实现的多功能系统资源统计工具,用来取代Linux下的vmstat. ...
- python selenium 下拉列表_从下拉列表中选择python selenium选项
我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...
- python 语料标注_在python中怎么标记文本?
要运行下面的python程序,必须在系统中安装(NLTK)自然语言工具包. NLTK模块是一个庞大的工具包,旨在帮助您使用整个自然语言处理(NLP)方法. 要安装NLTK,请在终端中运行以下命令.su ...
- python怎么网络通信_深入Python中的网络通信
TCP/IP 计算机与网络设备两情侣要谈恋爱,相互通信,那么双方就必须有规则.基于相同的方法,不同的硬件.操作系统之间的通信,都需要一种规则.而我们就把这种规则称为协议(protocol). TCP/ ...
- python pipeline框架_介绍Python的Django框架中的静态资源管理器django-pipeline
django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 django-staticfiles 的collectstatic 命令,在开发 ...
- python中立方表示_在Python中表示一个对象的方法
在 Python 中一切都是对象.如果要在 Python 中表示一个对象,除了定义 class 外还有哪些方式呢?我们今天就来盘点一下. 0x00 dict 字典或映射存储 KV 键值对,它对查找.插 ...
最新文章
- android自定义WaveView水波纹控件
- 贝叶斯定理与贝叶斯估计
- keepalived主要模块
- linux shell脚本的执行方式与区别
- quartz.properties配置文件详解
- ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg
- 征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长
- 开氏温度与摄氏度换算_【油品小知识】你不知道的“柴油密度”与“温度”的故事...
- vue||简易版音乐播放器
- 那些年,我们一起踩过的 “Android 坑”
- medsem-中介效应:基于结构方程模型SEM的中介效应分析
- json数组排序,深拷贝,浅拷贝,删除,增加,筛选,
- 深大与南科大计算机,深圳大学和南方科技大学你选哪所?哪所实力更强?
- 领英封号怎么办,如何避免封号?
- 什么是千行代码缺陷率?
- 构建属于自己的 jre Docker 镜像
- c语言matlab混编max函数,Matlab与C++混编 – engin.h
- Moamen and XOR
- windows 桌面图标 隐藏 小盾牌标志
- Linux是 UEFI 还是L启动模式,怎么看系统是UEFI还是Legacy BIOS启动模式
热门文章
- pyqt 界面关闭信号_木辛老师的编程课堂之Python和Qt实战慕课软件开发:增加关闭按钮...
- request重定向_golang不想http自动处理重定向的解决方案
- java boolean转int,java如何将int转换为boolean
- hashcode java_java 的Object类的hashcode()方法具体是怎么实现的?
- linux sar 历史负载,查看负载、vmstat、top、sar以及nload命令
- 如何利用echarts图表获取条状图点击名称和值
- 在MAC OS 下配置python + Flask ,并支持pyCharm编辑器
- Linux C 数据结构——队列
- 输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
- React开发(116):ant design search引入