QT基于Npcap设计的网络抓包小程序
抓取网络数据包,在windows下可以使用
WinPcap或者Npcap,而在linux中可以使用libpcap
小程序是使用的语言是C/C++,目前只可以进行同步使用,不可以异步
百度网盘链接:https://pan.baidu.com/s/1r8a5xDjdI8skylJ54pzJBw
提取码:twhg
小程序运行结果
-
主界面

-
网卡信息的显示

-
随机抓取一个网络数据包,并进行解析

说明该数据包在传输层为UDP协议,对UDP协议进行解析

-
单独解析一个TCP协议的数据包


没有抓到数据包,或者抓到的数据包无法解析,进行报错处理
对于数据包的解析,分别解析数据链路层的以太网帧头部,网络层的ip协议,传输层的TCP协议和UDP协议。
而对于数据包的抓取,小程序默认只抓10次,有三个功能:只抓取TCP协议的数据包,只抓取UDP协议数数据包,随机抓取一个数据包(TCP,UDP)。只要抓取一个,就会停止抓取,要是抓不到就会有一个弹窗进行报错。
Npcap
Npcap 是 Nmap 项目的网络包抓取库在 Windows 下的版本。是致力于采用 Microsoft Light-Weight Filter (NDIS 6 LWF) 技术和Windows Filtering Platform (NDIS 6 WFP) 技术对当前最流行的 WinPcap 工具包进行改进的一个项目。(WinPcap目前已经停止了更新)
Npcap 基于 WinPcap 4.1.3 源码基础上开发,支持 32 位和 64 位架构,在 Windows Vista 以上版本的系统中,采用 NDIS 6 技术的 Npcap 能够比原有的 WinPcap 数据包(NDIS 5)获得更好的抓包性能,并且稳定性更好。
Npcap 还独具以下特点:
- 支持 NDIS 6 技术;
- 支持“只允许管理员 Administrator”访问 Npcap;
- 支持与 WinPcap 兼容或并存两种模式;
- 支持 Windows 平台的回环(Loopback)数据包采集和发送;

另外,Windows中想要使用Npcap进行抓包,得先安装官方的这个配置文件,里面有程序运行中的一些动态库文件。
QT
中科大开源镜像网站中下载,https://mirrors.ustc.edu.cn/qtproject/archive/qt/5.9/5.9.9/

安装的时候,记得改下软件安装的路径,在配置安装的编译器选项时,不知道怎么配置就全安装吧~~
在项目中,主要使用QT软件对解析后的网络数据包进行一个可视化显示,利用Qt做一个简单的窗体来显示解析后的数据。
Npcap中使用的函数
- 获取主机网卡信息
int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf);
| 参数 | 含义 |
|---|---|
| pcap_if_t **alldevsp | 存放获取的网卡设备的结构体,使用的数据结构是链表 |
| char *errbuf | 存放错误信息 |
| 返回值 | -1:表示获取失败 |
函数作用:获取当前主机的网卡设备信息,存放在alldevsp结构体链表中;当返回值为-1时表示调用失败,并在errbuf数组中存放错误的信息
int pcap_findalldevs_ex(char* source, struct pcap_rmtauth *auth,
pcap_if_t** alldevs, char* errbuf );
该函数也是获取当前主机的网卡信息,只是这个函数所获取的网卡信息在对网卡的描述方面比pcap_findalldevs详细
| 参数 | 含义 |
|---|---|
| char* source | 指定是本地适配器或者远程适配器,本地适配器:rpcap://,远程适配器:rpcap://host:port,抓包文件。file://c:/myfolder/ |
| struct pcap_rmtauth *auth | 需要抓取其他主机的网卡信息时,该结构体中需要有访问目的主机时的身份验证信息,访问本机时可以传入NULL |
| 返回值 | -1:表示获取失败,0 :表示获取成功 |
pcap_if_t 结构体链表的描述:
struct pcap_if {
struct pcap_if *next;
char *name; /* name to hand to "pcap_open_live()" */
char *description; /* textual description of interface, or NULL */
struct pcap_addr *addresses;
bpf_u_int32 flags; /* PCAP_IF_ interface flags */
};
struct pcap_rmtauth的描述:
struct pcap_rmtauth

本文介绍了如何使用C++和QT库基于Npcap开发一个网络抓包小程序。该程序能捕获并解析UDP和TCP协议的数据包,支持显示网卡信息,同时提供了数据链路层、网络层、传输层的解析过程。文章包含Npcap的介绍、QT环境搭建、关键函数使用、程序流程和字节序转换等问题。
最低0.47元/天 解锁文章
4342

被折叠的 条评论
为什么被折叠?



