passthru驱动 封包问题
研究了一些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;
}
}
。。。。。。。。
}