阅读:3579回复:2
关于TDI的结构,各位老大帮忙看看,一帖只能给45分,不够我再开新帖(已结)
看了几天DDK,还是比较糊涂。
1.所谓的TDI Driver是指哪些部分?Transport Driver和TDI Clients两部分吗? 2.如果我要拦截所有IP包,在这层应该可以实现吧? 3.我要做的工作有哪些?写一个Clients和一个Transport Driver? 4.那么这两部分是分别被注册到系统的相应Stack中吗? 5.还有endicking兄的问题,我也搞不明白,为什么说TDI不能拦截握手数据?我个人的理解是,就算没有socket响应,那SYN的包也应该先送到TCP层,至于有没有Socket响应,以及返还RST包,不是由TCP协议来处理的吗? 我知道我问的比较菜,但一个人看DDK实在是效率太低了。 分不够再加,先谢谢各位!!!! [编辑 - 6/6/04 by wolf_desert] [编辑 - 6/7/04 by wolf_desert] |
|
沙发#
发布于:2004-06-06 18:25
1.所谓的TDI Driver是指哪些部分?Transport Driver和TDI Clients两部分吗?
-------- TDI Driver可以分为TDI Server和TDI Client。TDI Server就是TCPIP.SYS驱动(或者NETBIOS.SYS等其它驱动,但是这里只讨论TCPIP),TDI Client一般就是AFD.SYS,当然我们也可以编写自己的TDI Client。 还有TDI Filter,这种类型驱动插在TDI Client和TDI Server之间。 2.如果我要拦截所有IP包,在这层应该可以实现吧? -------- 不可能!TCPIP.SYS接收到带有IP头的包之后,将剥离IP、TCP/UDP头,然后再把真正的应用数据传递给TDI Client。 显然,你不可能去编写TDI Server,所以你不可能得到IP包。 3.我要做的工作有哪些?写一个Clients和一个Transport Driver? -------- 大多数情况下,大家都是写一个TDI Filter驱动。 4.那么这两部分是分别被注册到系统的相应Stack中吗? -------- Sorry,我不明白这句话的意思。 5.还有endicking兄的问题,我也搞不明白,为什么说TDI不能拦截握手数据?我个人的理解是,就算没有socket响应,那SYN的包也应该先送到TCP层,至于有没有Socket响应,以及返还RST包,不是由TCP协议来处理的吗? -------- 上面第2点已经说明了为什么TDI Client得不到IP/TCP/UDP包。 但是如果你想实时截获远程主机对本地主机的连接请求,可以写一个TDI Filter,注册一个类型为TDI_EVENT_CONNECT的事件句柄。这样只要TCPIP.SYS接收到SYN包,它将调用你的回调例程,让你来做决定是否允许接收这个连接。 我知道我问的比较菜,但一个人看DDK实在是效率太低了。 分不够再加,先谢谢各位!!!! |
|
板凳#
发布于:2004-06-07 07:56
多谢!结帖给分。 :D
[编辑 - 6/7/04 by wolf_desert] |
|