关于bupt校内上网流量监听小工具笔记

2019-04-14 20:08发布

事情的起因

在bupt每个月有20G免费流量,这个流量是上下行的总和,就是说你上传东西的流量也是计算在内的。超过20G的话就需要够买,1块钱1G。 刚开始并不知道上数据行也要计算流量,每个月总是前几天就把20G用光了。就想着有这么一个软件,可以监听下流量,找了半天没有找到太好用的,主要是没有说一个可以断网的功能。因为我并不需要去分析这些数据,只要能有一个用多少时间,或是用够多少流量之后,有一个提示和自动断掉外网的功能就行。 做这个小工具是用QT做的。想起来做点想起来做点,差不多花了一个学期。之后也并没有用上,主要是实验室有网。平时在宿舍也够用了。 所有代码,文档,工具,下载地址 http://download.csdn.net/detail/liuzhuchen/9802083
最后的程序**工程目录**snifferFrom

第一个问题,把数据抓上来

工程目录 snifferWinpcap 总要有一个把数据抓下来才能统计流量,没有太多犹豫,直接使用winpcap库。虽然听说windows在流量统计这方面有一个使用更方便的接口。但是可能因为以前一直做linux的关系,十分不喜欢使用windows开发。 当然我们只需要库就可以了。
WpdPack库 下载地址 http://download.csdn.net/detail/liuzhuchen/9802056
winpcap 中文技术文档 下载地址 http://download.csdn.net/detail/liuzhuchen/9802055 看着文档的示例,写了一个能抓包snifferWinpcap的小测试,因为抓包时并不需要界面就没写。主要是把库添加到工程中就可以。
不用把这个库添加到全局配置中。直接添加到当前项目工程中就可以。
两种方法:
一、在pro文件中直接写 LIBS += -L$$PWD/../WpdPack/Lib/ -lwpcap LIBS += -L$$PWD/../WpdPack/Lib/ -lPacket INCLUDEPATH += $$PWD/../WpdPack/Include DEPENDPATH += $$PWD/../WpdPack/Lib 二、如下图在项目上右击选择添加库 这里写图片描述

第二个问题,写个简单的界面

工程目录 snifferFrom
效果可以看 snifferFrom ,这个也是最后的工程代码
1、可选网卡
2、可以过滤IP
3、有几个可选提示或是断网条件
4、可以开机启动,(这个可以用windows自带的,没怎么弄)
5、因为学校断网就是一个http get请求。有一个自定义的网址 这里写图片描述

第三个问题,区别上下行流量

获取本地信息工程目录 snifferTestsnifferLocalInfo 这个原来想的比较复杂。最后想想,校园网内IPv6不会花流量。只要知道当前选择的网卡IP或是MAC地址就可以了。

第四个问题,配置问题

conf**工程目录** conf
sqlite**工程目录** snifferTestsqlittest2 有两个选择,一个使用文件,二个使用数据库
conf 是原来想着是使用key:value的配置文件,使用C写的,想着修改比较麻烦。就使用数据库了,非常经典的sqllite ,也是QT默认直接支持的。 目标是在程序重新启动之后不用重新配置。

第五个问题,程序最小化到托盘,像QQ最小化一样

工程目录 snifferTest uopanTest

第六个问题,程序主动弹出提示框

工程目录 snifferTesthintTest 在程序最小化时,主动弹出提示框,计时时间到后主动关闭。
还有一个就是在弹出时,是不可以使用小工具的主窗体。只能看这提示,要么手动关了,要么等待自己关闭。

第七个问题,定时器


工程目录 snifferTest imerTest 定时器,大概有三四种使用方式。 在这个小工具中有两个主要的工作,
一、在第六问题中使用,计时时间到后主动关闭
二、在统计流量时使用

第八个问题,日志问题

工程目录 snifferTestsnifferLog QT自带的日志挺好用的,就是不能多线程。反正也没多大的东西,一个就一个吧。

第九个问题,断网请求(HTTP)

工程目录 snifferTestsnifferHTTPrequest

第十个问题,线程使用

工程目录 snifferTestsnifferThreadTest 主要是在有界面的程序中,主界面就是一个线程,其他程序都是通过主程序来启动的,现在问题是,只要开始抓包之后,就有两个一起跑的线程了。所以需要给抓包开一个线程。

第十一个问题,程序生成依赖关系

windeployqt 程序名 把所有有关的库和文件复制到当前目录下,步骤: 1、从开始菜单打开 《Qt 命令行》,
2、进入到要生成依赖的目录下,输入命令 :cd /d D:hellomw
3、然后使用 windeployqt 工具命令: windeployqt hellomw.exe

第十二个问题,生成exe安装文件

我使用的是SmartInstallMaker,十分简单,

小工具程序思路

数据类FlowCont 抓包部分(线程) :抓到数据把大小写入FlowCont
统计部分(定时器):每秒对FlowCont进行统计和条件判断,如果超过阀值,调用提示部分
提示部分(定时器,):
界面部分(人机交互):启动,停止 抓包部分 工作,并把启动时的配置更新到数据库中。
配置部分(配置读取,保存):