一,qt实现winpcap抓包界面程序的思路:
1,配置qt的winpcap环境
2,设计抓包程序的界面
3,在主线程创建子线程进行抓包操作
4,主线程开始加载界面,子线程加载设备列表
5,子线程将设备名列表传递给主线程,主线程接受子线程传递的设备名列表并提供显示供用户选择
6,主程序可以选择抓包的类型,修改抓包类型后子线程需要同步
7,主线程启动抓包,子线程判断选择的设备名是否存在或是否存在设备
8,若设备名存在,对此设备进行抓包,否则报异常并退出线程
9,线程分析包信息,而将包信息传递给主线程,主线程在界面上显示包信息
10,结束抓包将此次的抓包信息存储到文件中,便于记录
注:由于本人是按这套思路制作的程序,所以没有速成的办法
二,qt实现winpcap抓包界面程序的实现功能
1,在qt中使用winpcap进行编程
2,用于控制winpcap抓包程序的主要界面,提供选择设备,选择协议,以及启动和关闭抓包,显示抓包信息
3,对于以太网包,IP协议包,TCP,UDP协议包的解析
4,主线程与子线程的数据交互
5,主线程与子线程的同步
6,对UDP协议包的数据的解析(TCP协议包也大同小异,所以没有做TCP)
7,对UDP协议包的过滤以及设备的收集模式限定
8,通过信号与槽机制实现解析报文与报文显示的同步
9,将所有的协议包解析进行按编号存储
三,qt实现winpcap抓包界面程序的尚存问题以及未完全完成的部分
1,尚存问题:
①此程序必须选择最后一个设备才可以进行抓包(由于最后一个设备是真正可以使用的设备,而虚拟设备以及有问题的设备无法进行抓包)
②此程序不能连续抓包(由于winpcap获取的设备列表是不能获取两次的否则会异常,本人没有找到好的解决办法,可以尝试创造一个进程,然后在创建的进程中进行重新获取设备列表)
③此程序的时间不能具体到微秒(由于此处计时使用的是时间戳,而时间戳是以毫秒为单位,所以无法做到具体到微秒)
④将报文数据存储到文件没有使用换行(由于使用换行会导致读取时考虑换行符,会更加麻烦,所以此处没有做报文数据的换行,而是使用的特殊字符进行分隔)
2,未完成部分:
①抓包程序的连续抓包(与尚存问题相关,如果想要实现可以通过创建进程实现或对winpcap进行清除,从而可以重复获取设备列表)
②抓包程序的tcp,http,等报文的获取(由于报文的解析大同小异,所以此处仅仅对UDP报文进行解析,而没有对其他报文进行解析)
③混合报文的获取以及区分(实际上也不难,通过IP协议包的协议信息区分具体的报文,从而实现获取到报文或进行区分显示)
④报文的手动保存(由于此处使用的是结束抓包后自动保存,所以没有提供手动保存,并且手动保存需要对文件进行检测是否保存,较繁琐,但也较好实现)
四,qt实现winpcap抓包界面程序的实现画面
注:选择设备时选择最后一个设备,最后一个设备为你在使用的设备
五,程序代码具体位置