|
|
发表于 2003-12-26 10:11:03
|
显示全部楼层
共享上网大多采用类似nat技术。
内部对外界的访问全是由共享设备来转发的。或者设备收集任何非本地物理网络的请求然后由设备请求外部网络,进而回应内部网络的请求。
根据网络协议层的划分,它至少应该在ip层甚至tcp层(我不是很了解这类协议,嘿嘿)
那么它数据包就是封装在ip或者tcp里的数据段,对外看来是一个ip或者tcp的数据包,但是如果把ip或者tcp的头部和数据段分离开后。就可以看做是某高一层协议的数据包。
检查了ip包的头部发现在ip固定的头部和数据段中有一段区域是标明为“可选选项,如果有的话”这意味着如果没有协议使用这段的话可以使用这里作为共享上网的相关选项存放的地方。因为在tcp/ip的设计过程中已经设计了透明路由这一概念(类似sysgate的设备)。所以可以想象应该有给这类似的“协议”留有保存设置的位置。
好了说到这里,又要看下tcp/ip的原理和实现。大多数tcp/ip的协议族,他们对请求的回应所发回的数据包都是类似以下的方法。
把整个数据包复制到内存分配的一段空间,然后读出相关设置(头部信息,数据段的信息)。发回数据包,把相关信息,如原地址,目标地址对换,类似的标志位改下。然后写如数据段,发送。
在这一过程中,我们暂且讨论的“共享协议”的相关设置选项,应该是没有给破坏,然后在回送包中由“透明路由”来读取。
到了这里,我提供一个简单也许可能的实现。写一段c程序,直接来读写相关的“透明路由”可能使用到的头部信息或者数据段。检测到了的话,则丢弃这个数据包。
检测的标准,可以按照一些经常使用的软件,硬件的设置来检测。
为什么不用vc?因为似乎vc没办法对网络底层进行操作。。。。。。
这 4 我想的一个可能的实现。。。。。知识有限,错了表怪我。 |
|