透明代理(Transparency Proxy),就是对于“用户”透明地应用代理,哈哈,感觉还不如不解释呢!佛说:“你不说我倒明白,你越说我越不明白”。什么?不是佛说的,那姑且算是我说的了,这句话就不要什么版权了,随便拷贝!
按照代理安放地点的不同,可以分为三种:
就目前来看透明代理的支持也主要停留在TCP协议上,但这并不代表UDP协议不重要,只是支持UDP协议的代理协议不多,我所知道的Socks5代理服务器,完美支持UDP协议的甚少(不敢说没有,也许是我又孤陋寡闻了);还因为UDP协议为非面向连接的,面向数据报的协议特性,端口复用的情况很多,使得它实现起来更加困难。
本文只是简单的介绍透明代理,其具体实现的技术细节和性能方面的讨论将另外辟文讨论,如果你已经无法忍耐,就自己查看上面提到的软件的源码吧!:)
按照代理安放地点的不同,可以分为三种:
- 客户端透明代理:此类代理服务器一般和客户端位于同一主机,用户通过此类代理可以透明地通过代理访问网络资源,而不必所有软件都支持代理。
- 网络透明代理:此类代理服务器一般位于客户端和服务器间的网络设备上,表现形式也不尽相同,既可以安放在网关上,又可以位于网桥上。这种代理的存在使得代理对于用户来说更加透明,以至于“完全透明代理”可以用客户端的IP和端口代理访问服务器,从而保证服务器对客户的源IP地址认证依然有效。这种代理多用来作为缓存服务器,在一定程度上既节省了网络流量又加快了网络访问速度。
- 服务器端透明代理:我们平常所说的透明代理,一般特指这种代理。这种代理一般和提供服务器的服务器位于同一台主机或者是同一网段,主要功能是为服务器的服务内容提供cache并加快访问速度,网络上流行的用iptables + squid “疯狂”加速web服务器的方法值得就是此类代理了。
- 利用上文中提到的劫持系统库的方法通过替换socket接口函数库来为不支持代理的客户端软件提供代理支持。此类实现有:Windows平台下的SocksCape,Linux平台下的tsocks和proxychains。
- 通过一定的方法将指定的网络流量重定向到一个指定的socket,或者是截获指定的网络流量,然后对其实施代理。代表软件有:Linux平台下的transproxy和hellwolf的s5snake。两个软件很类似,都是通过netfilter提供的DNAT将连接转发到本地的另外一个tcp监听端口,然后再通过代理建立到原始目的IP地址(可以通过getsockopt获得)的连接。
就目前来看透明代理的支持也主要停留在TCP协议上,但这并不代表UDP协议不重要,只是支持UDP协议的代理协议不多,我所知道的Socks5代理服务器,完美支持UDP协议的甚少(不敢说没有,也许是我又孤陋寡闻了);还因为UDP协议为非面向连接的,面向数据报的协议特性,端口复用的情况很多,使得它实现起来更加困难。
本文只是简单的介绍透明代理,其具体实现的技术细节和性能方面的讨论将另外辟文讨论,如果你已经无法忍耐,就自己查看上面提到的软件的源码吧!:)








