小子又迷茫了,还是描述下问题,首先在MPSENDPACKETS对发往某一地址的所有TCP包进行加密,也修改过校验和。然后在PTRECEIVE中进行反向解密,最终调用NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1)将包含解密后数据的新建包MyPacket交给上层。这就是小子想实现的功能。
现在拿两台装上这个驱动的电脑测试发包和收包过程。用的网上现成TCP发包工具进行的测试。问题发现,加密和发包过程没问题,对方可以收到,同时跟踪发现对方解密函数也确实调用了,对新建包进行分析也和未加密前一样。但NdisMIndicateReceivePacket后发现测试工具显示的却是加密前的内容。
老马在吗?哪位可以给小子说说问题可能出在什么地方呢?
没看明白,你是说调用NdisMIndicateReceivePacket的时候,MyPacket的内容是解密后的吗?那这个地方应该是对了,是不?“测试工具显示的却是加密前的内容”不对吗?测试工具如果是协议层的,那它显示的包就应该是调用NdisMIndicateReceivePacket往上层传的数据包。
AnalysisPacket(MyPacket, TRUE);
if (pAdapt->MiniportHandle != NULL)
{
NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);
NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);
NdisUnchainBufferAtFront(MyPacket,&MyBuffer);
NdisQueryBufferSafe(MyBuffer,&MyPacketContent,&BufLength,32);
if(MyPacketContent != NULL)
NdisFreeMemory(MyPacketContent,BufLength,0);
NdisFreeBuffer(MyBuffer);
NdisDprFreePacket(MyPacket);
break;
}
AnalysisPacket之前是对包的修改过程,AnalysisPacket分析发现包的内容确实已经修改好,然后我用的winpcap-Sniffer捕获确发现显示的是修改前的内容,是选用Sniffer测试结果不对吗?
我估计是Sniffer层次比你的程序低,它先截获的数据包,当然是修改前的了
哦,能不能给推荐个协议层以上的抓包工具,再次感谢老马。
这个还真不清楚,一般抓包工具都会比较底层。你可以写个socket程序来测试,这是协议层的东西,应该没问题。