当前位置: 首页 > news >正文

WinDivert学习文档之五-————编程API(七)

5.7 WinDivertSend

BOOL WinDivertSend(__in HANDLE handle,__in const VOID *pPacket,__in UINT packetLen,__out_opt UINT *pSendLen,__in const WINDIVERT_ADDRESS *pAddr
);

参数

一个由WinDivertOpen()创建的有效的WinDivert句柄。

  • handle:包含要注入的包的缓冲区。
  • packetLen:包缓冲区的总长度。
  • pSendLen:注入的总字节数。如果不需要此信息,则可以为NULL。
  • pAddr:注入报文的地址。

返回值

        如果数据包注入成功,则为TRUE;如果发生错误,则为FALSE。使用GetLastError()获取错误的原因。

常见错误包括:

Name名称Code编码Description说明
ERROR_HOST_UNREACHABLE1232

This error occurs when an impostor packet (with pAddr->Impostor set to 1) is injected and

the ip.TTL or ipv6.HopLimit field goes to zero. This is a defense of last resort against infinite loops caused by impostor packets.

当注入一个冒名顶替数据包(pAddr-> impostor设置为1)并且ip地址为0时,会发生此错误。TTL或ipv6。hopllimit字段趋近于0。这是最后的防御手段,防止由冒充包引起的无限循环。

说明:
将数据包注入网络堆栈。注入的数据包可以是从WinDivertRecv()接收到的数据包,也可以是修改后的版本,或者是一个全新的数据包。注入的数据包可以被其他优先级较低的WinDivert句柄捕获并再次转移。

        只有WINDIVERT_LAYER_NETWORK和WINDIVERT_LAYER_NETWORK_FORWARD层支持数据包注入,如下所述:

Layer层Inject?注入?
WINDIVERT_LAYER_NETWORK
WINDIVERT_LAYER_NETWORK_FORWARD
WINDIVERT_LAYER_FLOW
WINDIVERT_LAYER_SOCKET
WINDIVERT_LAYER_REFLECT

        对于WINDIVERT_LAYER_NETWORK层,pAddr->出站值决定了数据包注入的方向。如果pAddr->Outbound字段为1,则数据包将被注入出站路径(即数据包离开本地机器)。否则,如果pAddr->Outbound为0,则数据包被注入入站路径(即到达本地机器的数据包)。注意,只有Outbound字段而不是注入报文中的IP地址决定报文的方向。

        对于注入入路径的数据包,pAddr->网络。IfIdx和pAddr->网络。假定SubIfIdx字段包含有效的接口编号。这些可以从WinDivertRecv()(用于数据包修改)或IP Helper API中检索。

        对于向外注入的报文,IfIdx和SubIfIdx字段当前被忽略,可能是任意值。在出站路径上注入入站数据包可能有效(对于某些类型的数据包),但是这应该被视为“未记录”的行为,并且可能在将来进行更改。

        对于冒名顶替数据包(其中pAddr-> impostor设置为1),WinDivert将自动减少ip。TTL或ipv6。回注前的HopLimit字段。这是为了减轻无限循环,因为WinDivert不能防止冒名顶替的数据包再次被WinDivertRecv()捕获。

        注入的数据包必须具有正确的校验和或未设置相应的pAddr->*校验和标志。WinDivertRecv()捕获的数据包/地址对保证满足此条件,因此可以不加修改地重新注入,而无需重新计算校验和。否则,如果需要修改,则可以使用windiverthelpercalcchecksum()函数重新计算校验和。

http://www.dtcms.com/a/392855.html

相关文章:

  • 【StarRocks】-- 异步物化视图实战
  • 应用随机过程(一)
  • 【项目实战 Day4】springboot + vue 苍穹外卖系统(套餐模块 完结)
  • 素材库网站分享
  • 第8节-PostgreSQL数据类型-Text
  • React-router和Vue-router底层实现原理
  • 宝藏音乐下载站,免费好用
  • pygame AI snake 大乱斗
  • TCP FIN,TCP RST
  • 睡眠PSG统一数据集的设计思路
  • 告别Vibe Coding!敏捷AI驱动开发:用AI高效构建可维护的复杂项目
  • EA-LSS:边缘感知 Lift-splat-shot 框架用于三维鸟瞰视角目标检测
  • 和为 K 的子数组
  • 从流量红利到运营核心:“开源AI智能名片+链动2+1模式+S2B2C商城小程序”驱动电商行业价值重构
  • 【ICLR 2024】MogaNet:多阶门控聚合网络
  • 小语言模型(SLM):构建可扩展智能体AI的关键
  • ​​[硬件电路-293]:不同频率对应不同周期时间对应表
  • 自定义你的tqdm
  • Tiny10 os是啥?原来是精简的Windows10
  • ThingsBoard部署APP过程错误-flutterr Resolving dependencies
  • webpack入门基础
  • 机器视觉VUE3手势识别+手势检测控制相机缩放
  • AI大模型:(三)1.3 Dify文本生成快速搭建旅游助手
  • Linux文件下载卡在0%进度问题处理
  • 【车载开发系列】区分Flash,RAM与E2PROM的概念
  • 未来展望:小模型撬动大未来
  • TenstoRT加速YOLOv11——python端加速
  • 探索LiveTalking:开启实时数字人交互新时代
  • 【开题答辩全过程】以 Javaweb的火花流浪动物救助系统设计与实现为例,包含答辩的问题和答案
  • 链家二手房数据爬虫与预测项目 Python 线性回归 Scrapy+Django+Echarts 机器学习 大数据✅