QT基于Npcap设计的网络抓包小程序

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

抓取网络数据包,在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

NpcapNmap 项目的网络包抓取库在 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 还独具以下特点:

  1. 支持 NDIS 6 技术;
  2. 支持“只允许管理员 Administrator”访问 Npcap;
  3. 支持与 WinPcap 兼容或并存两种模式;
  4. 支持 Windows 平台的回环(Loopback)数据包采集和发送;

官方网站:https://nmap.org/npcap/

在这里插入图片描述
另外,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
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值