阅读:1631回复:7
关于ptreceive和ptreceivepacket
我的网卡本来调用ptreceivepacket,可我把函数中内容修改,改成copy包的形式。后发现网卡调用ptreceive,我实在想不明白,我看了以前老前辈们发的贴子,也没搞清楚。
而且我通过分析包,发现无论出去的包还是回来的包都调用ptreceive,这愈发让我糊涂了,各位大侠来分析分析。 |
|
最新喜欢:blueai... |
沙发#
发布于:2003-06-25 10:44
如果
1。你将包的status改为NDIS―STATUS―RESOURCE那么NDIS就调用 protocolreceive函数。 2。如果你将packet的OOB数据去掉,那么NDIS调用protocolreceive 函数。 ????????????????????????????? 且我通过分析包,发现无论出去的包还是回来的包都调用ptreceive,这愈发让我糊涂了,各位大侠来分析分析。 ??????????????????????????? 完全不明白出去的包怎么ptreceive???呢? |
|
|
板凳#
发布于:2003-06-25 11:05
是这样的:
我的机器做服务器,要在别人对我tcp三次连接的第三次利用imd驱动给我的机器发一个rst包,遇到以上问题。 当我转到使用ptreceive中时,发现连网都不能上了,也就是我访问别人访问不了,通过分析发现我发出去的包的rst位被我置1了,可我操作的地方只有ptreceive啊,只能是发出去的包走了ptreceive 所以不理解. 对第一个问题,我只是简单的copy了一下数据,是不是我应该复制一下oob数据啊? |
|
地板#
发布于:2003-06-26 21:13
你讲的太粗糙了,
我仔细看了你的描叙,可以看不懂,你的包 的流程,好像你的RST一时是发给自己上层,一时有发给对方 |
|
|
地下室#
发布于:2003-06-26 22:40
antspower
你应该禁止lookback。 |
|
5楼#
发布于:2003-06-26 23:10
是loopback的包。可以丢弃
|
|
|
6楼#
发布于:2003-06-27 10:32
各位大侠,分已经给了,什么是loopback包啊?能详细点么?
如何判断这个是loopback包呢? 是不是我发送的时候返回pending 就有这个包呢? |
|
7楼#
发布于:2003-06-27 11:39
上层驱动发送一个包,提交给ndis,ndis判断这个包的目的地址,如果包是广播形式(mac的目的地址为0xFFFFFF)或者网卡工作在混杂模式下,就会把这个数据包再提交给上层,就好像是本机收到的数据包一样
你可以在调用ndissend的时候使用这些标志 #ifdef NDIS51 #define SEND_PACKET_FLAGS NDIS_FLAGS_DONT_LOOPBACK #else #define NDIS_FLAGS_SKIP_LOOPBACK_W2K 0x00000400 #define SEND_PACKET_FLAGS ( NDIS_FLAGS_DONT_LOOPBACK | NDIS_FLAGS_SKIP_LOOPBACK_W2K ) #endif 2000下有点小bug,所以需要使用未公开的一个标志NDIS_FLAGS_SKIP_LOOPBACK_W2K。 再具体点的看http://ndis.com/papers/loopback.htm,很详细 |
|