比如sygate,是怎么实现的。我觉得可以通过截获IP包再转发可以实现。不只是不是这样,或者有其他的办法?
如果是截获IP包再转发的话,如何截获IP包呢?转发时需要对IP包进行什么样的处理?接收到的数据包怎么返回给请求的机器?
在下比较菜的说,望大虾们畅所欲言,谢了先
------------------------------------
《CSDN论坛新助手 CSDN's forum Explorer》,支持最新改版论坛,回复、浏览“方便”,“快捷”!
下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe

解决方案 »

  1.   

    谢谢楼上的大大侠!我把我的问题具体一下:
    1、sygate的代理是在网络的那一个层上?是IP层吗?
    2、sygate是怎么样截获数据包的?
    3、转发数据包之前需要对数据包进行什么样处理?还是原封不动转发出去?
      

  2.   

    1.IP层
    2.应该是用原始套接字截获数据包.
    3.sygate从内部接口接到一个ip包,把它映射(替换)到外部接口
    的[ip,端口]上发出去,当这个包的回应从外部接口到来时,再按照这个映射发到
    内部网上对应的[ip,端口]上,这就完成了一次通信。
      

  3.   

    看用的什么协议!是socket5 or socket4 or http or nat
      

  4.   

    sygate 是用的nat  wingate 是用的 socket5 +socket4 + http(好象后面也加入了nat) 通常情况下 nat 是透明的 而socket 等代理需要客户端支持
      

  5.   

    nat 是叫网络地址转换吧,这种转换还是在ip层动作吧?这种转换大概是怎么作的?
    to  kingzai(stevenzhu):
      我现在就是用原始套接字侦听ip包的,但是拿到ip包之后,如您所说“把它映射(替换)到外部接口
    的[ip,端口]上发出去”,是指将ip包的源地址改为外部接口的地址发出去吗?那么外网返回的结果我怎么区别它是返回给本地请求还是内网其他机器的呢?是在转发之前给每个包作标示吗?
      

  6.   

    当收到IP包后,NAT  将IP 和 PORT都变换成server的IP 和给某个client 分配的端口。
    但外部机器给内部某一个client 发送数据的时候,根据PORT判断具体哪个client接收!
      

  7.   

    根据port判断好像有些道理,但是ip包头中没有指出port,难道样再分析ip包,找出上层协议中包含的port信息?
        那么转发ip包用什么方法呢?也用原始套接字可以吗?
      

  8.   

    TCP头含有端口信息
    转发IP包可以用原始套接字,也可以用其他的方法,比如winpcap发包.
      

  9.   

    在上层协议中找端口信息,对tcp和udp应该没什么问题,但是icmp等其他协议呢?
    比如内网机器ping 外网ip的时候是什么情况啊?