阅读:1709回复:3
ptreceive只截获到了广播包是怎么回事啊?
小弟把2003DDK的PASSTHRU中的ptreceive中加了一段代码:
Status= NdisAllocateMemory( &pPacketContent, 2000, 0,HighestAcceptableMax); if (Status!=NDIS_STATUS_SUCCESS ) return Status; NdisZeroMemory (pPacketContent, 2000); pNext = MyPacket->Private.Head; NdisQueryBufferSafe(pNext, &pBuf, &BufLength, 32 ); NdisMoveMemory(pPacketContent, pBuf, BufLength); i = BufLength; for(;;) { DBGPRINT(("进入内部循环\n")); /* if(pNext == MyPacket->Private.Tail) { DBGPRINT(("到达尾部,跳出循环\n")); break; }*/ pNext = pNext->Next; //指针后移 if(pNext == NULL) { DBGPRINT(("下一缓冲区为空,跳出循环\n")); break; } NdisQueryBufferSafe(pNext,&pBuf,&BufLength,32); NdisMoveMemory(pPacketContent+i,pBuf,BufLength); i+=BufLength; } DBGPRINT(("ptreceive\n")); for(j=0;j<i;j++) DBGPRINT(("%d字节内容是:%x\n",j,pPacketContent[j])); DBGPRINT(("包大小是:%d\n",i)); 有两个问题: 问题一:每次pNext = pNext->Next;后pNext就为空,然后跳出for循环了。如果把 pNext = pNext->Next;放到 if(pNext == MyPacket->Private.Tail)之前也会说pNext == MyPacket->Private.Tail退出循环。也就是说每次只有Head这个Buffer. 问题二:在后面打印pPacketContent的时候前六个字节为ffffffffffff,接着六个字节为我的虚拟机的ma地址,而且只有这种的包,每次打开浏览器却没什么反应,难道是自己发的广播包又回来了??12,13字节是8和0,但是23字节是11。后面的就不知道对不对了。 打印内容如下: Passthru: ==> Protocol BindAdapter Passthru: <== Protocol BindAdapter: pAdapt 82A17E28, Status 0 Passthru: PtPnPHandler: Adapt 00000000, Event 4 Passthru: ==> Protocol BindAdapter Passthru: ==> Miniport Initialize: Adapt 82A16C98 Passthru: ==>PtRegisterDevice Passthru: <==PtRegisterDevice: 0 Passthru: <== Miniport Initialize: Adapt 82A16C98, Status 0 Passthru: <== Protocol BindAdapter: pAdapt 82A16C98, Status 0 Passthru: PtPnPHandler: Adapt 00000000, Event 6 Passthru: <==PtPNPNetEventReconfigure: pAdapt 00000000 Passthru: PtPnPHandler: Adapt 00000000, Event 6 Passthru: ==> Miniport Initialize: Adapt 82A17E28 Passthru: ==>PtRegisterDevice Passthru: <==PtRegisterDevice: 0 Passthru: <== Miniport Initialize: Adapt 82A17E28, Status 0 Passthru: 进入内部循环 Passthru: 下一缓冲区为空,跳出循环 Passthru: ptreceive Passthru: 0包内容是:ff Passthru: 1包内容是:ff Passthru: 2包内容是:ff Passthru: 3包内容是:ff Passthru: 4包内容是:ff Passthru: 5包内容是:ff Passthru: 6包内容是:0 Passthru: 7包内容是:c Passthru: 8包内容是:29 Passthru: 9包内容是:db Passthru: 10包内容是:e3 Passthru: 11包内容是:33 Passthru: 12包内容是:8 Passthru: 13包内容是:0 Passthru: 14包内容是:45 Passthru: 15包内容是:0 Passthru: 16包内容是:1 Passthru: 17包内容是:48 Passthru: 18包内容是:0 Passthru: 19包内容是:42 Passthru: 20包内容是:0 Passthru: 21包内容是:0 Passthru: 22包内容是:80 Passthru: 23包内容是:11 Passthru: 24包内容是:39 Passthru: 25包内容是:64 Passthru: 26包内容是:0 Passthru: 27包内容是:0 Passthru: 28包内容是:0 Passthru: 29包内容是:0 Passthru: 30包内容是:ff Passthru: 31包内容是:ff Passthru: 32包内容是:ff Passthru: 33包内容是:ff Passthru: 34包内容是:0 Passthru: 35包内容是:44 Passthru: 36包内容是:0 Passthru: 37包内容是:43 Passthru: 38包内容是:1 Passthru: 39包内容是:34 Passthru: 40包内容是:31 Passthru: 41包内容是:fb Passthru: 42包内容是:1 Passthru: 43包内容是:1 Passthru: 44包内容是:6 Passthru: 45包内容是:0 Passthru: 46包内容是:60 Passthru: 47包内容是:31 Passthru: 48包内容是:23 Passthru: 49包内容是:3a 。。。。。。。。。。。 |
|
沙发#
发布于:2009-06-05 10:39
难道没牛人 回一个?????
|
|
板凳#
发布于:2009-06-08 00:34
怎么没人知道这是则么回事啊?版主也不知道吗???
|
|
地板#
发布于:2009-07-08 11:28
Protocol驱动在希望收到unicast之前,需要发送OID_GEN_CURRENT_PACKET_FILTER,设定它像接受的包。
|
|