阅读:1815回复:11
关于ndis的概念问题!
我有3个问题想不通了:
1 windowNT自带ndis中间层驱动么?如果我装上了自己编的passtru中间层驱动,会不会把windows自己的中间层驱动冲掉? 2 中间层可以拦截一切封包的原理是什么?如果我的操作系统有2个中间层驱动,那么底层的微端口驱动会把数据投递给哪个中间层驱动?上层发下来的数据又会调用哪个中间层驱动? 3 windows的tcp/ip协议栈是不是属于协议驱动?自己编写的协议驱动是不是也可以截获一切封包?那么和中间层还有什么区别? 为什么现在都在中间层作过滤封包之类的防火墙? 望各位赐教! |
|
沙发#
发布于:2008-01-18 11:16
1,当然带了,而且很多,比如raspptp.sys/raspppoe.sys都是IMD
2,IMD是MS提供的过滤接口,在数据包流动时MS会主动调用的。系统会把所有IMD放在一张表中,一层一层调用。 3,TCPIP是协议驱动。协议驱动可以截获一切数据包,但有些数据包到IMD才会封装好,比如PPPoE,你用协议驱动接收到的就是Ethernet包,要到NDISWAN才会封装成PPPoE包! 其他问题在书上都可以找到答案! |
|
板凳#
发布于:2008-01-18 12:06
上面这位兄弟能留个联系方式吗,我公司需要你这样的人才
qq:43383123 |
|
地板#
发布于:2008-01-18 13:11
谢谢dahubaobao!谁说牛犊就不能是大虾?你太有才了!
可是有个问题我一直搞不懂: 多个协议驱动是不是会组成一个链表,数据传递到协议驱动时,会一层一层往上传,如果某个协议驱动拦截了数据,那么后面的协议驱动就收不到数据了? 中间层驱动是不是也是上面的原理? 还有,dahubaobao能不能给我推荐本讲这方面原理的书?我现在只能在网上到处搜,好费力阿! |
|
地下室#
发布于:2008-01-21 09:00
是的,一层一层的传。接收的数据肯定先经过IMD,然后才到协议驱动。
但协议驱动不是一层一层调用,而是NDIS根据相应的协议提交给不同的协议驱动处理。 比如TCP数据包,NDIS就会交给TCPIP.SYS处理。你自己的协议驱动是收不到这个包的。 协议驱动不能拦截数据包,只能嗅探。将NIC设置为混杂模式就可以了。 QQ:382690 |
|
5楼#
发布于:2008-01-22 00:47
谢谢楼上的dahubaobao!但是你又说过“协议驱动可以截获一切数据包”,这是怎么回事?NDIS是如何选择驱动协议而递交数据的?
|
|
6楼#
发布于:2008-01-22 09:31
回楼上的问题。
所有的向NDIS注册的协议驱动本质上都有能力获得所有数据包,在OpenAdapter时注明希望绑定的网卡介质类型,如果存在合适的网卡,那么就会建立一个OpenBlock,然后就可以收发数据包了。 4楼说的TCP数据包,并不存在这种数据包。即使存在,tcpip.sys能收到,其他协议驱动也能收到。 这么说吧: 一张网卡,收到数据包之后,会问所有的已经注册的协议驱动(有OpenBlock的),遍历调用一次所有协议驱动的接收函数。(当然要介质类型匹配)。至于某一协议驱动是否愿意接受数据包,完全不影响其他协议驱动。 1--> N的关系。 |
|
7楼#
发布于:2008-01-22 10:31
楼上的,你也太棒了!能搞得这么清楚!能问你的qq么?
|
|
8楼#
发布于:2008-01-22 19:14
“至于某一协议驱动是否愿意接受数据包,完全不影响其他协议驱动。”
linkin__park,你的意思是说协议驱动层不能做数据包的拦截了? |
|
9楼#
发布于:2008-01-23 09:14
完全不能~
|
|
10楼#
发布于:2008-01-23 10:39
强烈要求楼上留qq!
|
|
11楼#
发布于:2008-01-23 11:24
呵呵,我不怎么用QQ。邮箱:linkin__park@126.com
|
|