|
阅读:2080回复:1
NDIS抓包不全.... 麻烦看一下以 以前可以抓包的代码现在没法用了~
改用vista+wdk开发之后
之前一直运行正常的代码不知道怎么一下子不能编译了~~ 之后就像算了 拿passthru写个抓包程序也快 在passthru中没改什么 就分别在 MPTransferData PtReceive 和PtReceivePackets中加入了PacketAnalysis()函数 这个函数自己写的 就是把包相关信息打印出来~~ 问题就出现在这里 抓包很正常 但是我开IE上网时就没反映了 用windbg看输出就没反映了~~按理说上网肯定有接受数据包的~~奇怪了 以前的开发环境是 以前的开发环境 xp+ddk2003+vm5.x 编写win2003的NDIS驱动~ 我现在的开发环境是 vista+wdk +vm6.0 编写win2003的NDIS驱动~~ 不知道咋回事不能用 代码如下 .....
.....
....
....
NdisQueryPacket(packet
, &PhysicalBufferCount
, &BufferCount
, &NdisBuffer
, &TotalPacketLength
);
status = NdisAllocateMemoryWithTag(&mybuffer, 2048, 'a' ) ;
if( status != NDIS_STATUS_SUCCESS )
return NDIS_STATUS_FAILURE ;
NdisZeroMemory( mybuffer, 2048 ) ;
NdisQueryBufferSafe(
NdisBuffer,
&tembuffer,
©size,
NormalPagePriority
);
NdisMoveMemory(mybuffer, tembuffer, copysize) ;
DataOffset = copysize ;
while(1)
{
NdisGetNextBuffer(NdisBuffer , &NdisBuffer ) ;
if( NdisBuffer == NULL )
break ;
NdisQueryBufferSafe(
NdisBuffer,
&tembuffer,
©size,
NormalPagePriority
) ;
NdisMoveMemory( mybuffer + DataOffset , tembuffer, copysize) ;
DataOffset += copysize ;
}
/*
-----------------------------------------------------------------------------------------
从PACKET结构中提取数据-->结束
-----------------------------------------------------------------------------------------
*/
DbgPrint("=====>data: \n %s\n" , mybuffer) ;
DbgPrint("=====>copysize: \n %d\n" , copysize) ;
DbgPrint("=====>TotalPacketLength: \n %d\n" , TotalPacketLength) ;奇怪了 而且我的网卡之前是调用ptreceivepacket 现在改调用ptreceive 了 |
|
|
沙发#
发布于:2009-05-05 16:33
调用ptreceivepacket还是ptreceive跟你的NIC驱动有关,ptreceive是微软为了兼容而保留的,现在的网卡和网卡驱动默认都是用ptreceivepacket的,但是当你的ptreceivepacket在抓包分析时,由于时间可能长一些,就返回PENDING ,这样驱动就开始用ptreceive了,所以两个函数都要进行处理才行。
|
|