我写了一个简单的网络流量监视器来获得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实现网络流量监控相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. 舆情监控和应急处理方案,如何做好网络舆情监控?

    舆情监控是指通过不同的渠道,如社交媒体.新闻媒体.博客.论坛等,对公众的言论进行收集.分析.评估和反馈的过程.舆情监控的目的是帮助企业或组织了解公众的观点和情绪,并且能够及时做出回应,避免可能出现的舆 ...

  4. python系统监控_使用Python监控Linux系统

    阅读目录 一.Python编写的监控工具 一.多功能系统资源统计工具dstat 1.dstat介绍 dstat是一个用Python语言实现的多功能系统资源统计工具,用来取代Linux下的vmstat. ...

  5. python selenium 下拉列表_从下拉列表中选择python selenium选项

    我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...

  6. python 语料标注_在python中怎么标记文本?

    要运行下面的python程序,必须在系统中安装(NLTK)自然语言工具包. NLTK模块是一个庞大的工具包,旨在帮助您使用整个自然语言处理(NLP)方法. 要安装NLTK,请在终端中运行以下命令.su ...

  7. python怎么网络通信_深入Python中的网络通信

    TCP/IP 计算机与网络设备两情侣要谈恋爱,相互通信,那么双方就必须有规则.基于相同的方法,不同的硬件.操作系统之间的通信,都需要一种规则.而我们就把这种规则称为协议(protocol). TCP/ ...

  8. python pipeline框架_介绍Python的Django框架中的静态资源管理器django-pipeline

    django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 django-staticfiles 的collectstatic 命令,在开发 ...

  9. python中立方表示_在Python中表示一个对象的方法

    在 Python 中一切都是对象.如果要在 Python 中表示一个对象,除了定义 class 外还有哪些方式呢?我们今天就来盘点一下. 0x00 dict 字典或映射存储 KV 键值对,它对查找.插 ...

最新文章

  1. android自定义WaveView水波纹控件
  2. 贝叶斯定理与贝叶斯估计
  3. keepalived主要模块
  4. linux shell脚本的执行方式与区别
  5. quartz.properties配置文件详解
  6. ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg
  7. 征稿 | 2019年全国知识图谱与语义计算大会(CCKS2019)投稿时间延长
  8. 开氏温度与摄氏度换算_【油品小知识】你不知道的“柴油密度”与“温度”的故事...
  9. vue||简易版音乐播放器
  10. 那些年,我们一起踩过的 “Android 坑”
  11. medsem-中介效应:基于结构方程模型SEM的中介效应分析
  12. json数组排序,深拷贝,浅拷贝,删除,增加,筛选,
  13. 深大与南科大计算机,深圳大学和南方科技大学你选哪所?哪所实力更强?
  14. 领英封号怎么办,如何避免封号?
  15. 什么是千行代码缺陷率?
  16. 构建属于自己的 jre Docker 镜像
  17. c语言matlab混编max函数,Matlab与C++混编 – engin.h
  18. Moamen and XOR
  19. windows 桌面图标 隐藏 小盾牌标志
  20. Linux是 UEFI 还是L启动模式,怎么看系统是UEFI还是Legacy BIOS启动模式

热门文章

  1. pyqt 界面关闭信号_木辛老师的编程课堂之Python和Qt实战慕课软件开发:增加关闭按钮...
  2. request重定向_golang不想http自动处理重定向的解决方案
  3. java boolean转int,java如何将int转换为boolean
  4. hashcode java_java 的Object类的hashcode()方法具体是怎么实现的?
  5. linux sar 历史负载,查看负载、vmstat、top、sar以及nload命令
  6. 如何利用echarts图表获取条状图点击名称和值
  7. 在MAC OS 下配置python + Flask ,并支持pyCharm编辑器
  8. Linux C 数据结构——队列
  9. 输出一个文件的最后n行数据,如果文件总行数不足n行,则显示全部数据
  10. React开发(116):ant design search引入