阅读:1960回复: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了,所以两个函数都要进行处理才行。
|
|