passthru驱动 封包问题

yipihaoma 2012-08-27 02:00:42
研究了一些passthru的过滤都是 端口 IP 地址的过滤 都是一刀切的 要不就不让连通要不就放行

我尝试对包内容的TCP过滤,部分拦截
不发送或接受到敏感字符串时 都放行 收到敏感字符串时再丢弃包

现在问题是
一个tcp长连接,上次发送了敏感串'AAA' 被拦截阻断
下次再发送其它非敏感的串 ‘BBB’
但是server端都会收到 被阻断的'AAA'加上本次发送的串 收到为'AAABBB'

被阻断的串并没有被丢弃 并没有从tcp缓冲区中丢弃掉
有哪位高手知道原因吗,贴上发包拦截过滤代码,以下代码来自寒江独钓的随书源码

VOID
MPSendPackets(
IN NDIS_HANDLE MiniportAdapterContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets
)
{
ADAPT pAdapt = (PADAPT)MiniportAdapterContext;
NDIS_STATUS Status;
UINT i;
VOID MediaSpecificInfo = NULL;
UINT MediaSpecificInfoSize = 0;

for (i = 0; i < NumberOfPackets; i++)
{
NDIS_PACKET acket, MyPacket;

acket = PacketArray;
//
// The driver should fail the send if the virtual miniport is in low
// power state
//

if (pAdapt->MPDeviceState > NdisDeviceStateD0)
{
NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
acket,
NDIS_STATUS_FAILURE);
continue;
}

//判断滤数据包内容是否包含敏感串
fStatus = AnalysisPacket(Packet, FALSE);
if(fStatus == STATUS_DROP)
{
//如果满足条件则拦截 并丢弃本次send,并通知上层驱动发送完成
NdisMSendComplete(
ADAPT_MINIPORT_HANDLE(pAdapt),
Packet,
NDIS_STATUS_FAILURE // Lying Send...
);
continue;
}
}

。。。。。。。。

}
...全文
68 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧