cymvp
驱动牛犊
驱动牛犊
  • 注册日期2008-01-08
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:1814回复:11

关于ndis的概念问题!

楼主#
更多 发布于:2008-01-17 17:20
  我有3个问题想不通了:
    1   windowNT自带ndis中间层驱动么?如果我装上了自己编的passtru中间层驱动,会不会把windows自己的中间层驱动冲掉?
    2   中间层可以拦截一切封包的原理是什么?如果我的操作系统有2个中间层驱动,那么底层的微端口驱动会把数据投递给哪个中间层驱动?上层发下来的数据又会调用哪个中间层驱动?
    3   windows的tcp/ip协议栈是不是属于协议驱动?自己编写的协议驱动是不是也可以截获一切封包?那么和中间层还有什么区别?
为什么现在都在中间层作过滤封包之类的防火墙?

    望各位赐教!
dahubaobao
驱动牛犊
驱动牛犊
  • 注册日期2004-09-25
  • 最后登录2012-03-14
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度44点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-18 11:16
1,当然带了,而且很多,比如raspptp.sys/raspppoe.sys都是IMD

2,IMD是MS提供的过滤接口,在数据包流动时MS会主动调用的。系统会把所有IMD放在一张表中,一层一层调用。

3,TCPIP是协议驱动。协议驱动可以截获一切数据包,但有些数据包到IMD才会封装好,比如PPPoE,你用协议驱动接收到的就是Ethernet包,要到NDISWAN才会封装成PPPoE包!

其他问题在书上都可以找到答案!
ronaldo
驱动小牛
驱动小牛
  • 注册日期2004-12-17
  • 最后登录2011-08-02
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望277点
  • 贡献值0点
  • 好评度104点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-01-18 12:06
上面这位兄弟能留个联系方式吗,我公司需要你这样的人才
qq:43383123
cymvp
驱动牛犊
驱动牛犊
  • 注册日期2008-01-08
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-01-18 13:11
谢谢dahubaobao!谁说牛犊就不能是大虾?你太有才了!
可是有个问题我一直搞不懂:
多个协议驱动是不是会组成一个链表,数据传递到协议驱动时,会一层一层往上传,如果某个协议驱动拦截了数据,那么后面的协议驱动就收不到数据了?
中间层驱动是不是也是上面的原理?
还有,dahubaobao能不能给我推荐本讲这方面原理的书?我现在只能在网上到处搜,好费力阿!
dahubaobao
驱动牛犊
驱动牛犊
  • 注册日期2004-09-25
  • 最后登录2012-03-14
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度44点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-01-21 09:00
是的,一层一层的传。接收的数据肯定先经过IMD,然后才到协议驱动。

但协议驱动不是一层一层调用,而是NDIS根据相应的协议提交给不同的协议驱动处理。
比如TCP数据包,NDIS就会交给TCPIP.SYS处理。你自己的协议驱动是收不到这个包的。

协议驱动不能拦截数据包,只能嗅探。将NIC设置为混杂模式就可以了。

QQ:382690
cymvp
驱动牛犊
驱动牛犊
  • 注册日期2008-01-08
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-01-22 00:47
谢谢楼上的dahubaobao!但是你又说过“协议驱动可以截获一切数据包”,这是怎么回事?NDIS是如何选择驱动协议而递交数据的?
linkin__park
驱动牛犊
驱动牛犊
  • 注册日期2006-03-12
  • 最后登录2009-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-01-22 09:31
回楼上的问题。

所有的向NDIS注册的协议驱动本质上都有能力获得所有数据包,在OpenAdapter时注明希望绑定的网卡介质类型,如果存在合适的网卡,那么就会建立一个OpenBlock,然后就可以收发数据包了。

4楼说的TCP数据包,并不存在这种数据包。即使存在,tcpip.sys能收到,其他协议驱动也能收到。

这么说吧:
一张网卡,收到数据包之后,会问所有的已经注册的协议驱动(有OpenBlock的),遍历调用一次所有协议驱动的接收函数。(当然要介质类型匹配)。至于某一协议驱动是否愿意接受数据包,完全不影响其他协议驱动。

1--> N的关系。
cymvp
驱动牛犊
驱动牛犊
  • 注册日期2008-01-08
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-01-22 10:31
楼上的,你也太棒了!能搞得这么清楚!能问你的qq么?
cymvp
驱动牛犊
驱动牛犊
  • 注册日期2008-01-08
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2008-01-22 19:14
“至于某一协议驱动是否愿意接受数据包,完全不影响其他协议驱动。”
linkin__park,你的意思是说协议驱动层不能做数据包的拦截了?
linkin__park
驱动牛犊
驱动牛犊
  • 注册日期2006-03-12
  • 最后登录2009-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2008-01-23 09:14
完全不能~
cymvp
驱动牛犊
驱动牛犊
  • 注册日期2008-01-08
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分200分
  • 威望21点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2008-01-23 10:39
强烈要求楼上留qq!
linkin__park
驱动牛犊
驱动牛犊
  • 注册日期2006-03-12
  • 最后登录2009-09-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2008-01-23 11:24
呵呵,我不怎么用QQ。邮箱:linkin__park@126.com
游客

返回顶部