1.准备工作:配置环境,下载下面的工具,以及开发工具包
WinPcap V4.1.2:驱动程序、Dll文件
http://www.winpcap.org/install/bin/WinPcap_4_1_2.exe
WinPcap V4.1.2 Developer’s Pack:库文件、头文件、简单的示例程序代码和帮助文件
http://www.winpcap.org/install/bin/WpdPack_4_1_2.zip
2.新建qt工程
添加开发工具包的头文件和所需要的库
INCLUDEPATH += "F:/winpcap/WpdPack_4_1_2/WpdPack/Include"//头文件路径 //添加所需库 win32: LIBS += -LF:/winpcap/WpdPack_4_1_2/WpdPack/Lib/ -lPacket INCLUDEPATH += F:/winpcap/WpdPack_4_1_2/WpdPack/Lib DEPENDPATH += F:/winpcap/WpdPack_4_1_2/WpdPack/Lib win32: LIBS += -LF:/winpcap/WpdPack_4_1_2/WpdPack/Lib/ -lwpcap INCLUDEPATH += F:/winpcap/WpdPack_4_1_2/WpdPack/Lib DEPENDPATH += F:/winpcap/WpdPack_4_1_2/WpdPack/Lib
笔者的是这样,但是需要根据自己电脑情况改下。
3.在其他地方能找到很多相关的例子
我就只说一下我遇到的困难,希望能给各位一点帮助。
我利用了线程的方式新开了一个线程去进行抓包,并获取内容。
void packet_handler(u_char *param,const struct pcap_pkthdr *header, const u_char *pkt_data);
pkt_data这就是数据包的内容
我想要在新的线程中去ui(UI在主线程之中)。
这时需要用到信号槽机制,去更新ui界面
需要将
void packet_handler(u_char *param,const struct pcap_pkthdr *header, const u_char *pkt_data);
函数放在自己定义的线程的类中,并给它设为静态变量。向下面这样
//静态函数 pcap_loop 为外部函数;
static void packet_handler(u_char *param,const struct pcap_pkthdr *header, const u_char *pkt_data);
然后调用函数应该这样写
pcap_loop(adhandle_s, 0,sharkthread::packet_handler_,NULL);
这样就能够实现packet_hander函数调用类中信号了。
由于packet_hander是静态函数,还需要查看https://blog.csdn.net/u011962883/article/details/78490441?locationNum=7&fps=1 这个例子去完成更新界面的操作。