wolf_desert
驱动牛犊
驱动牛犊
  • 注册日期2004-04-22
  • 最后登录2005-10-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3579回复:2

关于TDI的结构,各位老大帮忙看看,一帖只能给45分,不够我再开新帖(已结)

楼主#
更多 发布于:2004-06-06 16:06
看了几天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]
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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实在是效率太低了。
分不够再加,先谢谢各位!!!!
wolf_desert
驱动牛犊
驱动牛犊
  • 注册日期2004-04-22
  • 最后登录2005-10-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-07 07:56
多谢!结帖给分。 :D

[编辑 -  6/7/04 by  wolf_desert]
游客

返回顶部