中文维基百科建站系统-HDwiki爱好者

当前位置: 主页 > Web技术 >

http隧道(tunnel)技术穿越防火墙

时间:2011-07-23 21:59来源:原创 作者:world7th 点击:

http隧道技术可以用来突破防火墙,一般防火墙不会封锁80端口,通过把数据包封装在http协议中,就可以实现穿越。具体原理:防火墙两端的数据包封装在防火墙所允许通过的数据包类型或是端口上,然后穿过防火墙与对端通讯,当封装的数据包到达目的地时,再将数据包还原,并将还原后的数据包交送到相应的服务进程上。 

举例如下:
A 主机系统在防火墙之后,受防火墙保护。防火墙配置的访问控制原则是只允许80端口的数据进出,屏蔽了其他的所有端口.  B主机系统在防火墙之外,是开放的。 现在假设需要

从 A 系统Telnet到B系统上去,怎么办?
使用正常的Telnet肯定是不可能了,但我们知道可用的只有80端口,那么这个时候使用http Tunnel,就是一个好的办法。思路如下:  在A 机器上运行一个 Tunnel 的Client端,

让它侦听本机的一个不被使用的任意指定端口(Port>1024 and port < 65535),如1234. 同时将来自1234端口上的数据导向到远端(B机)的80端口上(注意,是80端口,防火墙允许

通过),然后在B机上运行一个tunnel Server,同样在80端口上监听,然后把 80 端口上接收到的数据 (数据由 tunnel client传来)转到本机的 Telnet 服务端口23,这样就ok了。
根据刚才的设置, 数据流程大概是:

[telnet.exe:任意端口] ---> [tunnel client.exe:1234] ---->[Firewall]---->[tunnel server.exe:80]---->[telnet Server.exe:23]

说明:
telnet.exe 和 tunnel client.exe 是在同一个机器上的.
tunnel server.exe 和 telnet Server.exe 是在同一台机器上的.

按照流程图:
telnet.exe:           把发送的数据转向到 tunnel client.exe 的 1234 端口
tunnel client.exe     把数据发送给 tunnuel server.exe:80 ( 这次连接外网机器的80端口了, 防火墙应该是没有异议吧 )
Friewall              只允许 80 端口的数据进出.
tunnel server.exe     负责把接收到的数据转发给 telnet 的服务进程, 并可以接收 telnet 服务进程的数据
telnet Server.exe     把要发送的数据转给 tunnel server.exe,由它把数据经 80 端口发给 tunnel client.exe.


协议指定了一个  CONNECT 请求方法. Client 可以使用这个方法通知 Proxy Server 连接指定的服务器IP和端口号. Proxy Server
在接收到这个请求后与指定的服务器IP和端口号建立连接,如果连接失败会通知 Client 并关闭连接,成功则给 Client 发送
"Coonection Established" 并保持连接. 在与 Client 和 Real Server 建立连接后,Proxy Server 就不关心数据的内容了,此时就表现为 tunnel 了.

[Client]----[FireWall]------>[Proxy Server:80]------->[Real Server]
   |            |               |                           | 
  Src   只允许80端口数据通过   数据转发                       Dest


相关协议:

在 Client一端, 我们只对 CONNECT 方法感兴趣.  在 Client 和 ProxyServer 建立连接后, Client 必须发送 CONNECT 请求.
格式如下:

CONNECT <destination_address>:<destination_port> <http_version><CR><LF>
<header_line><CR><LF>
<header_line><CR><LF>
...
<header_line><CR><LF>
<CR><LF>


Proxy Server 处理来自 Client 的请求, 然后和 destionation_address:destination_port 建立连接.


proxy server 给 Client 返回 HTTP 回应.
格式如下:
<http_version> <code> <message><CR><LF>
<header_line><CR><LF>
<header_line><CR><LF>
...
<header_line><CR><LF>
<CR><LF>

如果 Proxy Server 分析 Client 请求格式有误或者与 destionation_address:destination_port 连接失败,都会关闭连接.
如果成功则可以转发数据, 作为 tunnel 使用.

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
推荐内容
  • xml概述

     1996年,万维网联盟(W3C)开始设计一种可扩展的标记语言,使其能够将SGML的灵活性和强大功能与已经被广泛采用的HTML结合起来,经过W3C开发人员的努力...

  • 利用ffmpeg在linux下将mp3文件转换为wma

    现在网络朝宽带网发展越来越快了,但服务器托管环境要变化还是要很多的¥,所以能节省一分就是一分。在网络上音频文件通常使用mp3格式存储,mp3格式音质可以压得比较...

  • nginx支持手机应用(mobile)相关

    nginx支持手机应用的一些配置...

  • F5负载均衡器简明配置手册

    负载均衡器通常称为四层交换机或七层交换机。四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的...

  • HTTP协议详解

    HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展...

  • 分布式数据库拆表拆库的常用策略

    在大容量,高负荷的web系统中,对数据库进行一系列拆分,可有效提升数据库容量和性能。在初学程序的早期,程序员通常都喜欢按传统数据库设计模式,设计为单库和单一功能...