基于 QT(C++) 实现 (GUI)IP 流量分析程序

📅 2026/6/18 23:35:00
基于 QT(C++) 实现 (GUI)IP 流量分析程序
♻️ 资源大小46.0MB➡️资源下载https://download.csdn.net/download/s1t16/87450296IP 流量分析程序实现一、作业要求实现一个流量分析程序具体要求Windows 平台上基于 WinPcap图形用户界面编程语言不限输入捕获条件IP 地址、时间段输出 IP 分组主要字段版本、协议、源地址与目的地址实现 IP 流量排序按协议或 IP 地址撰写说明文档包括编程环境、关键问题、程序流程、测试截图等提交全部程序包括源代码、可执行程序、说明文档等。二、IP 数据包格式IP 协议位于网络层是 TCP/IP 协议簇中的核心协议提供数据传输的最基本服务是实现网络互联的基本协议。IP 分组的结构如表 2.1 所示。RFC791 是最早的 IP 协议的文本它对 IP 分组结构做出了明确的规定。IP 数据报是一个与硬件无关的虚拟包由首部和数据两部分组成。首部的前一部分是固定长度共 20 字节是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段其长度是可变的。首都中的源地址和目的地址都是 IP 协议地址。版本4 位头长4 位服务类型8 位封包总长度16 位封包总长度16 位封包标识16 位封包标识16 位封包标识16 位标志3 位片断偏移地址13 位存活时间8 位存活时间8 位协议8 位校验和16 位校验和16 位来源 IP 地址32 位来源 IP 地址32 位来源 IP 地址32 位来源 IP 地址32 位来源 IP 地址32 位目的 IP 地址32 位目的 IP 地址32 位目的 IP 地址32 位目的 IP 地址32 位目的 IP 地址32 位选项可选选项可选选项可选填充可选填充可选数据数据数据数据数据表 2.1 IP 包结构IP 分组结构的各个字段含义如下版本占 4 位bit指 IP 协议的版本号。目前的主要版本为 IPV4即第 4 版本号也有一些教育网和科研机构在使用 IPV6。在进行通信时通信双方的 IP 协议版本号必须一致否则无法直接通信。首部长度占 4 位bit指 IP 报文头的长度。最大的长度即 4 个 bit 都为 1 时为 15 个长度单位每个长度单位为 4 字节TCP/IP 标准DoubleWord所以 IP 协议报文头的最大长度为 60 个字节最短为上图所示的 20 个字节。服务类型占 8 位bit用来获得更好的服务。其中的前 3 位表示报文的优先级后面的几位分别表示要求更低时延、更高的吞吐量、更高的可靠性、更低的路由代价等。对应位为 1 即有相应要求为 0 则不要求。总长度16 位bit指报文的总长度。注意这里的单位为字节而不是 4 字节所以一个 IP 报文最大长度为 2^16 - 165535 字节。标识identification该字段标记当前分片为第几个分片在数据报重组时很有用。标志flag该字段用于标记该报文是否为分片有一些可能不需要分片或不希望分片后面是否还有分片是否是最后一个分片。片偏移指当前分片在原数据报分片前的数据报中相对于用户数据字段的偏移量即在原数据报中的相对位置。生存时间TTLTimetoLive。该字段表明当前报文还能生存多久。每经过 1ms 或者一个网关TTL 的值自动减 1当生存时间为 0 时报文将被认为目的主机不可到达而丢弃。使用过 Ping 命令的用户应该有印象在 windows 中输入 ping 命令在返回的结果中即有 TTL 的数值。协议该字段指出在上层网络 7 层结构或 TCP/IP 的传输层使用的协议可能的协议有 UDP、TCP、ICMP、IGMP、IGP 等。首部校验和用于检验 IP 报文头部在传播的过程中是否出错主要校验报文头中是否有某一个或几个 bit 被污染或修改了。源 IP 地址32 位bit4 个字节每一个字节为 0255 之间的整数及我们日常见到的 IP 地址格式。源 IP 地址32 位bit4 个字节每一个字节为 0255 之间的整数及我们日常见到的 IP 地址格式目的 IP 地址32 位bit4 个字节每一个字节为 0255 之间的整数及我们日常见到的 IP 地址格式。三、开发环境硬件环境Intel(R) Core(TM)i7 CPU, 16.00GB DDR操作系统Microsoft Windows 10开发环境Qt Creator 4.10.0编程语言C界面框架Qt四、程序流程图五、关键问题5.1 数据包捕获程序抓取数据包的主要流程为通过 pcap_findalldevs 函数获取主机当前所有的网卡设备名称用户选择网卡后便确定了网卡名通过 pcap_open 函数打开指定网卡在获取网卡设备后通过 pcap_compile 函数编译过滤表达式将上一步设置的过滤器通过 pcap_setfilter 函数绑定至该网卡以便网卡按照既定规则进行数据包的抓取通过 pcap_next_ex 函数即可进行数据包的捕获该函数的返回值为按字节存储的数据。5.2 数据包解析在上一部分中我们介绍了如何通过 WinPcap 库提供的函数进行数据包的捕获。为了解析数据包的各个字段我们定义了“以太网首部”结构体以及“IP 数据包”结构体。在得到 pcap_next_ex 函数的返回值后我们将原始包数据强制类型转换为上述两种结构体即可通过’-’操作符获取相应的字段值。六、测试截图6.1 主页面展示程序界面主要包括三部分网卡设备选择、分析选项以及流量分析。“网卡设备选择”主要给用户提供选择要监听的网卡。“分析选项”给用户提供了筛选数据包的功能可筛选的字段包括源地址、目的地址以及传输层协议类型。“一键导出”功能可以供用户方便地将抓取的流量数据导出为 CSV 格式文件。“流量分析”将捕获的数据包以列表形式展示给用户解析字段包括IP 版本号、传输层协议、源地址、目的地址以及捕获时间。6.2 IP 数据包获取数据包列表用户通过点击界面上的“开始抓取”按钮即可开始抓包工作。当抓取到数据包后列表控件将解析后的数据包字段填充至新一行并且自动滚动至列表最下方。如此一来用户即可实时查看到抓取数据包的情况。数据包排序用户通过点击“流量分析”表格控件上方的“协议”或“时间”条目即可对表格中的数据包按照相应的条目进行排序显示。当点击“协议”条目时表格中的数据项会自动按照相同协议组合在一起。当点击“时间”条目时表格中的数据项会按照相同时间组合在一起并可按照时间的升序或降序排列。6.3 IP 数据包过滤地址筛选用户可以通过在“分析选项”中的“源地址”、“目的地址”和“协议类型”设置抓取数据包的规则。当用户设置了“源地址”规则程序抓取数据包时会匹配其“源地址”字段若符合该规则那么表格控件会添加上该数据包的详细信息。“目的地址”规则同样会过滤数据包的“目的地址”字段满足规则的数据包会呈现在表格控件。协议筛选“协议类型”规则提供了四种传输层协议其会过滤数据包的“协议”字段若满足规则就将该数据包添加至表格控件。如下图设置了“源地址”为“192.168.190.133”协议类型为“TCP”那么程序会按照规则匹配数据包的相应字段是否符合规则若满足条件则该数据包被添加至表格控件。6.4 IP 数据包导出用户可以点击“分析选项”中的“一键导出”按钮若此时表格控件存在捕获的数据包信息那么会弹出“保存文件”提示框进行保存操作。导出的文件格式为.csv包含表格控件中的所有信息如表头、对应列的所有数据包信息。具体保存信息情况如下图所示。