首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >世界粮食计划署过滤器:通过FwpsInjectNetworkSendAsync发送时丢弃的原始TCP数据包

世界粮食计划署过滤器:通过FwpsInjectNetworkSendAsync发送时丢弃的原始TCP数据包
EN

Stack Overflow用户
提问于 2014-05-05 03:30:26
回答 1查看 805关注 0票数 0

我在FWPM_LAYER_OUTBOUND_IPPACKET_V4注册了一个内核世界粮食计划署过滤器,在那里我将每个IPv4 NET_BUFFER_LIST复制到一个缓冲区,并从工作线程重新注入它,而不做任何修改。我使用FWPM_SUBLAYER_UNIVERSAL作为子层。基本上:

代码语言:javascript
复制
mdl = IoAllocateMdl(buffer, ...)
MmBuildMdlForNonPagedPool(mdl);
FwpsAllocateNetBufferAndNetBufferList0(..., mdl, ..., &nbl)
FwpsInjectNetworkSendAsync0(..., nbl, ...)

它返回0,以及来自sendComplete回调的NET_BUFFER_LIST_STATUS()。

这适用于UDP和ICMP (我得到回复),但不适用于TCP数据包。我可以看到SYN从我正在测试的虚拟机的NetMon中传出,但是NetMon没有看到来自外部(在主机中)的数据包。当然也没有来自远程主机的回复。

我尝试更新IP校验和(在classifyFn中为0),但没有任何变化。当我的classifyFn接收到TCP校验和时,它已经是正确的(据NetMon所知)。我查看了原始的nbl、我的平面缓冲区和WinDBG中新创建的nbl,它们都包含IP数据包(从0x45开始,等等)。

我必须为过滤器创建一个新的子层吗?数据包是否因为我从与系统进程关联的工作线程调用sendAsync而被丢弃?

EN

回答 1

Stack Overflow用户

发布于 2014-05-06 20:42:43

回答我自己的问题:显然,在重新注入数据包之前更新所有校验和(包括tcp/udp)解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23460642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档