【网络编程】网络包捕获技术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说明文档


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

相关文章
|
3天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的新时代
本文探讨了云计算和网络安全的紧密关系,分析了云服务、网络安全及信息安全的关键要素。通过深入浅出的技术解析,帮助读者理解这两个领域的融合及其对现代信息技术的影响。
|
5天前
|
存储 安全 网络安全
云计算与网络安全:技术演进与挑战
【10月更文挑战第3天】在数字化时代,云计算作为支撑现代信息技术架构的重要基石,为各行各业提供了前所未有的便利和效率。然而,随着云服务的广泛应用,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,分析当前云服务的安全措施,并讨论信息安全领域的未来发展方向。通过深入浅出的方式,旨在提升读者对云计算和网络安全重要性的认识,以及如何在这个快速发展的领域中保持安全意识。
|
2天前
|
运维 定位技术 网络虚拟化
|
7天前
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
49 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
2天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【10月更文挑战第6天】 在数字化的浪潮中,云计算已成为推动创新和效率的关键力量。然而,随着云服务的普及,网络安全问题也日益突出。本文将探讨云计算环境下的网络安全挑战,分析信息安全策略的重要性,并提供实用的防护措施。我们将通过具体案例,展示如何在享受云计算带来的便利的同时,保障数据的安全和隐私。
26 6
|
5天前
|
存储 安全 网络安全
云计算与网络安全:技术挑战和策略
【10月更文挑战第3天】在数字化时代,云计算已经成为企业存储、处理和分析数据的首选平台。然而,随着其应用的广泛性,网络安全问题也日益凸显。本文将探讨云计算环境中的安全挑战,包括数据泄露、服务中断等风险,并介绍一些实用的安全措施,如加密技术和访问控制策略。通过这些措施,我们可以更好地保护云环境,确保数据的完整性和隐私。
|
1天前
|
存储 云安全 安全
云计算与网络安全的交织:技术发展与挑战##
随着云计算技术的迅猛发展,网络安全问题日益凸显。本文将探讨云服务、网络安全和信息安全之间的复杂关系,分析当前面临的主要安全威胁,并提出相应的防护措施。通过深入剖析实际案例,揭示云计算环境中潜在的安全隐患及其应对策略,以期为相关领域的研究和实践提供参考。 ##
|
2天前
|
安全 物联网 5G
无线网络技术:5G之后的通信革命
【10月更文挑战第16天】本文探讨了5G之后无线网络技术的发展趋势,涵盖5G-A、Wi-Fi 7及未来通信技术展望。5G-A提升了网络速度、时延和连接数,Wi-Fi 7则在性能和可靠性上大幅跃升,未来通信技术将朝向更高速度、更低延迟、更广覆盖方向发展。
|
1天前
|
运维 安全 网络安全
|
2天前
|
存储 云安全 安全
云计算与网络安全:技术挑战与应对策略
【10月更文挑战第6天】 在数字化浪潮下,云计算已成为现代企业不可或缺的技术支柱。然而,随着云服务的快速发展,网络安全问题亦日益凸显。本文将探讨云计算中的安全威胁,并提供针对性的防御措施。从基础的云服务概念出发,文章深入分析了云环境下的安全风险,并结合实际案例,提出了一系列增强云安全的实用建议。读者将通过本文获得对云计算安全领域的全面认识,以及如何实施有效防护的策略。

热门文章

最新文章