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)

任何建议都非常感谢。

干杯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php cve-2014-9427漏洞,WEB应用漏洞-温州特种设备检测研究院.DOC

WEB应用漏洞-温州特种设备检测研究院附件3&#xff1a;重点网站技术检测报告重点网站技术检测报告网站属地&#xff1a;浙江温州网站名称&#xff1a;温州市特种设备检测研究院域名&#xff1a;_重点网站技术检测报告经技术检测发现&#xff0c;你单位网站(地址&#xff1a;)存…

c#左移、右移基础

转&#xff1a;http://www.cnblogs.com/songsz1/archive/2012/10/16/2725983.html转载于:https://www.cnblogs.com/piaopiao7891/archive/2012/10/16/2726358.html

oracle导出审计表,Oracle审计表AUD$处理方法

Oracle版本&#xff1a;11.2.0&#xff0c;其他版本要测试DBMS_AUDIT_MGMT能否成功1. 查询表&#xff0c;然后truncateselect count(*) from aud$;truncate table aud$;select count(*) from aud$;2.创建表空间create tablespace adttbsdatafile /oracle/OMT/admin/oradata/aud…

python转c报错no module named_python异常No module named 'win32com'

异常原因:python调用com组件操作office将word转pdf报错如下Traceback (most recent call last):File "D:/wordTest/wordTest.py", line 2, in from win32com import clientModuleNotFoundError: No module named win32comTraceback (most recent call last):File &qu…

如何清除tomcat缓存

用tomcat容器&#xff0c;大家可能会发现这样的问题&#xff0c;修改jsp文件后&#xff0c;但用IE打开 依然是以前的Jsp的页面。 出现这种现象的原因主要是tomcat缓存的原因。 解决办法如下: 在jsp文件头加上 <meta http-equiv"Expires" content"0"&…

sql 链接到oracle数据库,通过MSSQL连接服务器连接至Oracle数据库

前言有很多时候&#xff0c;我们需要MSSQL与Oracle进行跨库查询或数据交互。本篇随笔将阐述如何通过MSSQL的连接服务器连接至Oracle数据库&#xff0c;并且读取数据的示例。具体步骤首先需要到Oracle的官网下载Oracle Client(简称OCT)&#xff0c;也就是通常大家所说的Oracle客…

python一看就很厉害的代码_Python学习教程:怎么写出让人看起来就很舒服的代码?...

Python学习教程&#xff1a;怎么写出让人看起来很优雅舒服的代码&#xff1f;让人眼前一亮&#xff01;很多新手在开始学一门新的语言的时候&#xff0c;往往会忽视一些不应该忽视的细节&#xff0c;比如变量命名和函数命名以及注释等一些内容的规范性&#xff0c;久而久之养成…

VBS 自动发送邮件

--------------------------------------------------------------------------------- 函数名称 : SendMail 函数功能 : 自动发送邮件功能 函数输入 : SendTo----收件人&#xff0c;多个收件人可使用";"隔开MailTopic----邮件主题MailBody----邮件内容,此处内容格式…

oracle更新数据没有变化,往oracle里面写入数据,怎么表空间都没有变化

当freelist里面没有记录了&#xff0c;也就是块空间已经没有办法容纳新的记录了&#xff0c;这时候就需要扩展extent.这里有一个脚本来查看段空间使用情况。[php]create or replace procedure show_space( p_segname in varchar2,p_owner in varchar2 default user,p_type …

关于python变量的描述_Python变量命名的详细介绍

目前开发命名规范基本都遵循驼峰命名法&#xff0c;如&#xff1a;userName。我也不将这个规范的特性了&#xff0c;大家都明白。接下来进入正题&#xff0c;如何在python中取一个好名字&#xff0c;让你能更好的见名知意呢&#xff1f;1.元组(Tuple)类型变量命名在python中Tup…

Visual Studio 2010 单元测试之一---普通单元测试:http://blog.csdn.net/tjvictor/archive/2011/02/09/6175362.aspx...

本文以Visual Studio 2010为例&#xff0c;来介绍如何在Visual Studio里面进行单元测试. 首先来介绍普通单元测试&#xff0c;这是进行顺序测试、压力测试的基础。如果在Visual Studio 2010(2008)里面没有发现下图中的Test菜单&#xff0c;请用Visual Studio安装光盘进行安装&a…

python调用数据库数据类型_Python使用Mysql官方驱动(取出dict类型的数据)

简介虽然Python有很多连接mysql的库&#xff0c;比如mysqldb, pymysql~这些都很方便&#xff0c;现在就教大家使用mysql的官方库来操作mysql.安装windows: 下载链接image.png选择自己的windows版本和Python版本&#xff0c;下载msi文件后双击安装即可。(如果在网站没找到msi版本…

docker构建oracle集群,docker 构建 oracle数据库 镜像-Go语言中文社区

前言之前docker 部署的 oracle 镜像&#xff0c;突然从 dockerhub 下架了。所以没办法&#xff0c;只能自己打包一个oracle 数据库的镜像。找来找去&#xff0c;其实oracle 自身就提供了oracle 的产品 docker 构建脚本。所以直接按照oracle 官方的docker 构建仓库的说明打包。o…

oracle opatch那个回退,下面是我在打OPatch时使用的一般步骤,供大家参考

下面是我在打OPatch时使用的一般步骤&#xff0c;供大家参考&#xff1a;1、停止crs_stat -t## running as oraclesrvctl stop instance -d -isrvctl stop instance -d -isrvctl stop nodeapps -nsrvctl stop nodeapps -n## running as root(分别在2个节点执行)$CRS_HOME/bin…