Zhou533
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2003-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1302回复:2

请教:包过滤的实现?

楼主#
更多 发布于:2003-05-13 20:45
现在,已经通过IP找到具体的包了,怎样才能过滤掉?(基于Passthru)

我的思路是只接受不发送,再释放相应资源,可行吗?

希望众大虾指条明路!!!


还有一个问题


LookAheadBuffer与Packet中的数据是什么关系?

我通过IP过滤相应的包,还要考虑LookAheadBufferSize和PacketSize的大小吗?


Everthing I Do,I Do it for you !
ruberman
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2011-04-06
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望15点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-13 20:51


LookAheadBuffer与Packet中的数据是什么关系?



 

看看本站前面的帖子,会很有帮助!
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-16 20:51
这是胡老大的回答:


再次重复一遍关于返回null的情况。当nic miniport调用
ndisethindicatepacket的时候,ndis就调用协议的ptrecieve,
这个时候会返回null。当nic miniport内存不够的时候,会
设置NDIS_PACKET的flag为ndis_resource然后indicatepacket,
这个时候也会使得ndis调用协议的ptrecieve,但是NdisGetPacket
不会返回null。返回了null说明一个问题,就是nic miniport
不支持或者不在这个包中提供oob data。因此,nic不需要把
一个ndis_packet提交给协议层,只需要提交一些raw data就
行了。这些raw data就在lookaheadbuffer和data里面。

对于返回null,还分2种情况:
一种是提交的数据都包含在ptreceive的入口参数中了,这个时候
协议层判断该包是否属于本协议,例如ip协议判断协议字段是否
是0x800。如果是,协议层负责拷贝这段数据,协议层不能直接
用这些指针构造packet,必须分配一块新内存。

还有一种情况是只有部分数据,协议层同样判断(判断方法同上)
如果协议发现这个包的确属于自己,那么它调用
miniport_transferdata来让nic miniport上传剩下的数据。

我贴的代码就是对这两种情况的处理。ptrecieve共有3种情况,
第一种是NdisGetPacket不返回null,这个passthru已经处理了。
剩下两种情况就是我贴的代码。

这里要说明一点的是,passthru用了一个让初学者郁闷的方法,
当它判断返回null的时候,它直接调用ndisXXXindicatepacket,
这样ip层会判断之后调用imd_transferdata,imd_transferdata
调用miniport_transferdata,对于上层(ip)来说,完美的仿真
了nic的行为,但是对于firewall之类的处理就加大了难度,
我猜想大多数人的郁闷都来源于此。




 
放弃瘟草,现吃李草
游客

返回顶部