qt 写抓包程序

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  这个例子去完成更新界面的操作。


猜你喜欢

转载自blog.csdn.net/zxl_1996/article/details/80068917