【网络编程】网络包捕获技术WinDivert介绍

简介: 我在准备开发协议测试工具的时候,在网上搜索了很多资料,偶然发现了这个强大的库,简单方便的API使得一切都变得容易,今天就来简单介绍一下它。 步骤一、下载windivert的代码库,官方网站 百度搜WinDivert

【网络编程】网络包捕获技术WinDivert介绍


一、windivert 介绍及环境搭建


  我在准备开发协议测试工具的时候,在网上搜索了很多资料,偶然发现了这个强大的库,简单方便的API使得一切都变得容易,今天就来简单介绍一下它。

  步骤一、下载windivert的代码库,官方网站 百度搜WinDivert


微信图片_20220424112722.png


   步骤二、解压下载的代码包,然后拷贝里面的include和对应平台的lib到自己的工程


微信图片_20220424112729.png


   步骤三、在你的VS工程中包含对应目录头文件目录和库目录文件,最后别忘了把.dll.sys拷贝到生成目录。


微信图片_20220424112734.png


微信图片_20220424112738.png



二、快速上手


   先看下面的一段代码,大致介绍了整个网络包从捕获、接收、修改到发送的过程。


// 打开过滤对象
mHandle = WinDivertOpen("tcp.DstPort == 80", //过滤规则
                        WINDIVERT_LAYER_NETWORK, //过滤的层
                        0, 0);
if (mHandle == INVALID_HANDLE_VALUE) //开启过滤对象,可以通过错误码识别错误
{
    return ;  //error
}
// 接收过滤到的网络包内容
if (!WinDivertRecv(mHandle,  // windivert对象
          packet, packetLen,  //char* packet和buff长度
          &recvSize,   // int 实际读取的数据长度
          &addr)) //WINDIVERT_ADDRESS
 {
    // error
 }
 //  网络包头部解析
if (!WinDivertHelperParsePacket(packet, recvSize, 
            &iphdr, NULL, NULL, NULL, NULL, 
            &tcphdr, &udphdr, NULL, NULL, NULL, NULL))
  {
       // error
  }  
  // -----修改网络数据包内容
  // 计算校验和
 WinDivertHelperCalcChecksums(packet, packetLen, &addr, 0);
  // 把修改后的包发送出去
 if (!WinDivertSend(handle, packet, packetLen, &addr, NULL))
 {
       // send error
 }


从上面的代码看,是不是非常简单?我刚开始也是被这简单的操作步骤给迷住了,但在真正开发的过程中还是有一些问题需要解决。


   1. 篡改UDP,通过WinDivertHelperParsePacket方法中参数udphdr不为空即可判断当前捕获的包是UDP包,然后严格按照UDP头进行读取,首先需要先读取IP头内容,然后再读取UDP头格式。具体的格式可以参考维基百科中的介绍。篡改难度不大,这主要是因为UDP本身就是不可靠的。


   2. 篡改TCP,同上只需要判断tcphdr不为空即表示是TCP包,解析的时候首先也是先读取IP头内容,然后才是TCP的内容。我们知道TCP是面向连接的可靠的网络传输协议,因此篡改起来就要麻烦一些,解决思路是这样的,首先需要将这条链接的通讯两端的网络包全部捕获下来,并解析出里面的ACK和SEQ,当进行篡改后就需要人为的对后续的每个包的ACK和SEQ进行修正,以保证接收的双方能够正常识别,否则就会被重置和断开连接。


三、总结


   如果仅仅只需要监控网络包,开发起来还是比较的方便快捷。如果需要篡改其中的内容,就需要针对性的额外开发代码,感兴趣的读者可以新手写一下。


参考资料:


https://reqrypt.org/windivert-doc.html

windivert官方API说明文档


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
7天前
|
云安全 安全 网络安全
云计算与网络安全:技术挑战与解决策略
【10月更文挑战第39天】随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,并提出相应的解决策略。通过分析云服务模型、网络安全威胁以及信息安全技术的应用,我们将揭示如何构建一个安全的云计算环境。
|
7天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
21 2
|
8天前
|
云安全 安全 网络安全
云计算与网络安全:技术融合的未来之路
【10月更文挑战第38天】 在数字化浪潮中,云计算和网络安全成为支撑现代企业和个人数据安全的两大基石。本文将深入探讨云计算服务如何与网络安全技术相结合,保障信息安全,并分析面临的挑战及未来发展趋势。我们将通过实际案例,揭示云安全的最佳实践,为读者提供一条清晰的技术融合路径。
|
9天前
|
安全 网络安全 数据库
云计算与网络安全:技术融合的未来之路
【10月更文挑战第37天】本文将探讨云计算与网络安全的交汇点,揭示它们如何共同塑造信息安全的未来。我们将深入了解云服务的核心组件、网络安全的关键策略以及两者如何相互增强。通过分析当前的挑战和未来的趋势,本文旨在为读者提供一条清晰的路径,以理解并应对这一不断发展的技术领域。
|
10天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
39 5
|
11天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【10月更文挑战第35天】本文将探讨云计算与网络安全的交叉点,包括云服务、网络安全和信息安全等技术领域。我们将深入了解云计算的基本概念,以及如何通过云服务实现网络安全和信息安全。同时,我们还将讨论云计算面临的安全挑战,并提出相应的解决方案。最后,我们将通过代码示例展示如何在云计算环境中实现网络安全和信息安全。
26 3
|
12天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的深度剖析
【10月更文挑战第34天】本文将深入探讨云计算与网络安全的关系,包括云服务、网络安全、信息安全等技术领域。我们将通过实例和代码示例,解析云计算如何改变网络安全的格局,以及如何在云计算环境下保护信息安全。我们将从云计算的基本概念开始,然后深入到网络安全和信息安全的主题,最后通过代码示例来展示如何在云计算环境下实现网络安全和信息安全。
|
13天前
|
供应链 安全 网络安全
区块链技术与网络安全:机遇与挑战
区块链技术与网络安全:机遇与挑战
42 2
|
8天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务、网络安全和信息安全的技术领域
【10月更文挑战第38天】本文将深入探讨云计算与网络安全之间的关系,包括云服务、网络安全和信息安全等技术领域。我们将通过实例分析,了解如何保护云计算环境中的数据和应用程序,以及如何应对网络安全威胁。同时,我们还将讨论一些常见的网络安全攻击类型,并提出相应的防御策略。最后,我们将介绍一些实用的工具和技术,以帮助您更好地保护您的云计算环境。
|
12天前
|
监控 安全 网络安全
云计算与网络安全:技术融合下的挑战与机遇
【10月更文挑战第34天】在数字化转型的浪潮中,云计算已成为企业信息技术架构的核心。然而,随之而来的网络安全问题也日益突出。本文将探讨云计算服务中的网络安全挑战,分析信息安全的关键要素,并提供实用的安全策略和最佳实践。我们将通过具体案例,揭示如何在享受云计算带来的便利的同时,保障数据的安全性和完整性。

热门文章

最新文章