阅读:2062回复:13
请问如何在passthru下的PtReceive里面drop掉一个包
因为初学,小弟天真的以为只要去掉Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);以后的所有东西(因为我想把报文拿出来再drop)就可以阻止包的发送,但是每次都蓝屏。百思不得其解,还请高人指点。
还有小弟查询过去的帖子,有人说把LookAheadBuffer里面的数值全部改成FF,就可以断开这一个包。但小弟不清楚他的格式,到底要怎样才能把它的值都改成FF? 问题也许很傻,但对小弟来说意义重大,老大们千万不要不屑回答啊,多谢 |
|
最新喜欢:xiaoji... |
沙发#
发布于:2003-12-28 19:24
很简单的, 不向上Indicate 然后 return NDIS_STATUS_NOT_ACCEPTED;
|
|
板凳#
发布于:2003-12-28 22:50
楼上说的对!
|
|
地板#
发布于:2003-12-29 03:00
dkingfirst 大哥说得对
|
|
地下室#
发布于:2003-12-29 03:03
蓝屏的原因其实是我抓包的code的问题
|
|
5楼#
发布于:2003-12-29 16:32
不知你有没有遇到这种情况:NdisGetReceivedPacket()返回NULL,这时该如何得到这个包的数据呀?
能否把你的代码共享一下? [编辑 - 12/29/03 by chudd] |
|
6楼#
发布于:2003-12-29 16:52
不知你有没有遇到这种情况:NdisGetReceivedPacket()返回NULL,这时该如何得到这个包的数据呀? 有不少老帖子讲了的,请翻翻hu版的帖子。 |
|
7楼#
发布于:2003-12-29 17:07
在你想drop的地方,让状态返回NDIS_STATUS_NOT_ACCEPT行不行呢?
|
|
|
8楼#
发布于:2003-12-29 18:06
根据我这几天的经验,Packet=NdisGetReceivedPacket()是必然返回NULL的,至少在xp中。所以我们根本不care在 if (Packet != NULL){}里面的东西,因为肯定不会用到,原因我不知道。
如果要drop一个包,在 pAdapt->IndicateRcvComplete = TRUE;这句前面加 Status = NDIS_STATUS_FAILURE; break; 这样所有的包都掉了,所以要防火的话,用个if{}框起来。 我不知道放Status = NDIS_STATUS_NOT_ACCEPTED;可不可以,我的好像不行。break是跳过后面的语句(好像这才是真正发包的语句〕,因为PtReceive原本是一个Do While的格式. |
|
9楼#
发布于:2003-12-29 18:15
不知你有没有遇到这种情况:NdisGetReceivedPacket()返回NULL,这时该如何得到这个包的数据呀? 老大不屑于讲的我来分享一下我的微薄经验。 我用来抓包文的code也是从Packet里面抓,结果每次都蓝屏,因为Packet根本就是空的。 听说包头在HeaderBuffer里面,内容在LookAheadBuffer里面,我不知道对不对,也不知道怎么拿出来。还请老大们赐教啊 |
|
10楼#
发布于:2003-12-30 13:30
我看到从前的贴子,讨论的特别多,关于这个NdisGetReceivedPacket是不是返回null的问题,适合网卡有关系的,我的网卡realtek RTL8139就是不返回null的,所以我的过滤部分的程序就放在if(packet!=null)里啦!和网卡有关系的话,我觉得是不是为了通用,都应该放一份过滤的哪?!
:D |
|
11楼#
发布于:2003-12-30 13:32
还有,以太网的包头是放在HeaderBuffer里面的,取出来判断就行了,LookaheadBuffer是数据内容,就是从IP包头开始的数据的内容。 :D
|
|
12楼#
发布于:2003-12-30 14:44
我用
DbgPrint(\" HeaderBuffer: %u\\n\", HeaderBuffer); DbgPrint(\" HeaderBufferSize: %u\\n\", HeaderBufferSize); 打印,再drivermonitor里面看到的却是类似 -17.475 Default HeaderBuffer: 4286049008 -17.475 Default HeaderBufferSize: 14 的东东, 这里打印出来的应该是pointer本身,但是如果我要拿出pointer所指的内容要怎么办?PVOID定义的pointer要怎么样用? 我用 (char *)HeaderBuffer 强行改格式,结果蓝屏。请老大们告知正确使用方法 |
|
13楼#
发布于:2003-12-31 10:41
NdisMoveMemory(&EthHeader,HeaderBuffer,sizeof(ETHHDR));
是说打出来以太网报头么?你那是什么意思呢? :( |
|