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


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

相关文章
|
4天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
30 11
|
8天前
|
Web App开发 网络协议 安全
网络编程懒人入门(十六):手把手教你使用网络编程抓包神器Wireshark
Wireshark是一款开源和跨平台的抓包工具。它通过调用操作系统底层的API,直接捕获网卡上的数据包,因此捕获的数据包详细、功能强大。但Wireshark本身稍显复杂,本文将以用抓包实例,手把手带你一步步用好Wireshark,并真正理解抓到的数据包的各项含义。
44 2
|
16天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
25 6
|
15天前
|
存储 人工智能 安全
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
|
14天前
|
监控 安全 网络安全
云计算与网络安全:技术挑战与解决方案
随着云计算技术的飞速发展,其在各行各业的应用越来越广泛。然而,随之而来的网络安全问题也日益凸显。本文将从云服务、网络安全和信息安全等技术领域出发,探讨云计算面临的安全挑战及相应的解决方案。通过实例分析和代码示例,旨在帮助读者更好地理解云计算与网络安全的关系,提高网络安全防护意识。
|
16天前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
18天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
随着云计算技术的飞速发展,越来越多的企业和个人开始使用云服务。然而,云计算的广泛应用也带来了一系列网络安全问题。本文将从云服务、网络安全、信息安全等方面探讨云计算与网络安全的关系,分析当前面临的挑战,并提出相应的解决方案。
48 3
|
20天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
本文深入探讨了云计算在提供便捷服务的同时,如何应对日益复杂的网络安全问题。文章首先概述了云计算的基本概念及其服务模型,随后详细分析了网络安全的重要性以及云计算环境中存在的安全挑战。通过具体实例,本文进一步讨论了云服务提供商和用户如何共同维护网络环境的安全,并提出了未来网络安全发展的可能方向。旨在为读者提供一个关于云计算与网络安全相互作用的全面视角,同时强调在这一过程中采取主动防御措施的重要性。
29 1
|
13天前
|
存储 安全 网络安全
云计算与网络安全:技术融合下的挑战与机遇
随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,以及如何通过技术创新来应对这些挑战。我们将分析云服务的安全特性,讨论信息安全的最佳实践,并展望未来云计算与网络安全的发展趋势。
|
3天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
39 17