NDIS中间层驱动和Sygate等NAT型代理软件的包处理顺序是如何的?

ganghust 2005-11-23 05:21:22
我用NDIS规范实现了在中间层包过滤的程序,使用NDIS-HOOK方式。NDIS-HOOK 的工作原理是直接替换 NDIS 的函数库中的函数地址,这样只要向 NDIS 的请求就会先经过我自己函数的处理,这样就非常简单,处理完转发给系统函数就可以了。调试发现从本机发送的所有数据包都会经过中间层驱动。现在在本机上装有Sygate服务器代理软件,另外一台主机通过本机共享上网连接,截包发现它通过代理出去的包没有经过中间层驱动,而是直接从本机连接Intenet的接口转发出去了。如果使用WinGate这种应用层的代理软件,共享上网时就会发现所有的包都会经过服务器的中间层驱动.不明白为何会这样,如何让Sygate转发的报文也经过中间层驱动了,我也不是很明白中间层驱动和协议栈中IP层和链路层到底是一个什么顺序关系,Sygate 的NAT转换是在什么时候进行的?
...全文
825 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂放之歌 2005-12-26
  • 打赏
  • 举报
回复
HOOK 有个先后顺序问题.如果它比你先"截获"那么他就能决定你能得到什么包!?
而且 sygate /WinGate 这种代理软件 是要做到内核驱动的,所以很可能,它在你之前截获了.
至于为什么 没经过中间层.这可能就是独门绝技了.
ganghust 2005-12-06
  • 打赏
  • 举报
回复
谢谢了。
MapleInHG 2005-11-24
  • 打赏
  • 举报
回复
呵呵,Sygate创始人有个邮箱:Cris2005@sina.com,用中文就行了,他人很好,不知道会不会回答你的问题,呵呵。
ganghust 2005-11-24
  • 打赏
  • 举报
回复
谢谢。你说的问题我已经考虑到了。现在的问题是不是很清楚Sygate的工作机制,它转发的包在IP层就直接通过实际的网卡发送出去了。在NDIS-HOOK中根本就没有发现它传输的报文?是不是还需要更底层的截包?
MapleInHG 2005-11-23
  • 打赏
  • 举报
回复
不是很清楚,下面是一段有关的文字,希望有用,呵呵。当然知道sygate的机理也很重要。

NDIS Hook Driver。这是目前大多数个人防火墙所使用的方法。Hook的概念在Windows9x下非常流行,而且实现也很容易。在Windows9x下,驱动程序(VxD)通过使用Hook_Device_Service可以挂接NDIS所提供的所有服务。在Windows NT/2000下面如何实现Hook呢?有两种不同的思路:

1) 通过修改NDIS.SYS的Export Table。在Windows NT/2000下,可执行文件(包括DLL以及SYS)都是遵从PE(Portable Executable)格式的。所有向其他操作系统组件提供接口的驱动程序都有Export Table,因此只要修改NDIS.SYS的Export Table就可以实现对关键NDIS API的挂接。由于协议驱动程序在系统启动的时候会调用NdisRegisterProtocol来向系统进行协议注册,因此这种方法关键在于修改NDIS.SYS所提供的NdisRegisterProtocol/NdisDeRegisterProtocol/NdisOpenAdapter/NdisCloseAdapter/NdisSend函数的起始地址。我们知道,在用户态模式要修改PE文件格式可以用一些API来实现,而NDIS.SYS位于系统的核心内存区,因此要修改NDIS.SYS就不得不通过写驱动程序来实现,也就要求我们对PE文件格式有比较深入的了解。使用这种方法还要注意驱动程序的加载次序,显然Hook Driver必须在NDIS.SYS被加载之后,而在协议驱动程序如tcpip.sys被加载之前。另外,Windows2000还提供了系统文件保护机制,因此在修改ndis.sys还需要通过修改注册表屏蔽系统文件保护机制。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧