事情的起因
在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请求。有一个自定义的网址
第三个问题,区别上下行流量
获取本地信息工程目录 snifferTest\snifferLocalInfo
这个原来想的比较复杂。最后想想,校园网内IPv6不会花流量。只要知道当前选择的网卡IP或是MAC地址就可以了。
第四个问题,配置问题
conf**工程目录** conf
sqlite**工程目录** snifferTest\sqlittest2
有两个选择,一个使用文件,二个使用数据库
conf 是原来想着是使用key:value的配置文件,使用C写的,想着修改比较麻烦。就使用数据库了,非常经典的sqllite ,也是QT默认直接支持的。
目标是在程序重新启动之后不用重新配置。
第五个问题,程序最小化到托盘,像QQ最小化一样
工程目录 snifferTest\tuopanTest
第六个问题,程序主动弹出提示框
工程目录 snifferTest\hintTest
在程序最小化时,主动弹出提示框,计时时间到后主动关闭。
还有一个就是在弹出时,是不可以使用小工具的主窗体。只能看这提示,要么手动关了,要么等待自己关闭。
第七个问题,定时器
,
工程目录 snifferTest\timerTest
定时器,大概有三四种使用方式。
在这个小工具中有两个主要的工作,
一、在第六问题中使用,计时时间到后主动关闭
二、在统计流量时使用
第八个问题,日志问题
工程目录 snifferTest\snifferLog
QT自带的日志挺好用的,就是不能多线程。反正也没多大的东西,一个就一个吧。
第九个问题,断网请求(HTTP)
工程目录 snifferTest\snifferHTTPrequest
第十个问题,线程使用
工程目录 snifferTest\snifferThreadTest
主要是在有界面的程序中,主界面就是一个线程,其他程序都是通过主程序来启动的,现在问题是,只要开始抓包之后,就有两个一起跑的线程了。所以需要给抓包开一个线程。
第十一个问题,程序生成依赖关系
windeployqt 程序名
把所有有关的库和文件复制到当前目录下,步骤:
1、从开始菜单打开 《Qt 命令行》,
2、进入到要生成依赖的目录下,输入命令 :cd /d D:\hellomw
3、然后使用 windeployqt 工具命令: windeployqt hellomw.exe
第十二个问题,生成exe安装文件
我使用的是SmartInstallMaker,十分简单,
小工具程序思路
数据类FlowCont
抓包部分(线程) :抓到数据把大小写入FlowCont
统计部分(定时器):每秒对FlowCont进行统计和条件判断,如果超过阀值,调用提示部分
提示部分(定时器,):
界面部分(人机交互):启动,停止 抓包部分 工作,并把启动时的配置更新到数据库中。
配置部分(配置读取,保存):