您的位置:首页 >资讯列表 > 正文
发布时间:2020-04-23 17:10
HTTP代理网络穿透技术研究发展现状

  飞猪爬虫代理IP表示,随着网络技术的快速发展和人们网络安全意识的逐步提高,多数公司企业、组织机构在网络中都普遍采用了软硬件防火墙、入侵检测系统或统一威胁管理系统(UTM,比较有名的有BlueCoat等)来检测和防御网络中可能遇到的各类攻击。但同时,网络穿透技术也在不断发展,并融合了P2P技术[4][5],匿名通信技术[6]、加密隧道技术[7]、网络代理技术等各种技术,从而可以轻易的突破各类安全防护设备,达到与外界进行数据通信的目的。比如,基于HTTP协议的隧道技术就通过HTTP封装其它协议的方法,可以达到穿透防火墙和IDS系统的检测的目的。


u=1911803105,2758983681&fm=26&gp=0.jpg


  1.3.1 HTTP隧道原理


  HTTP隧道技术是指利用一种HTTP协议在网络间传输另一种网络协议数据的技术方法。整个过程主要包括数据的封装、数据传输和数据解析三部分。利用HTTP加密隧道机制来穿透代理网络是成功和典型的网络穿透方法之一,对HTTP认证代理使用HTTP隧道技术可以达到比较好的穿透效果[8]。


  通常在隧道入口处(源端),需要对数据包进行分片、加密和封装等处理。而在隧道出口处(目的端),需要对经隧道传输的数据包进行解封、解密,并对分片数据包进行重新组装,从而还原出原始的数据包。通过加密处理,决定了只有源端和目的端能够对隧道中的原始数据包进行解释,对其它节点来说,数据包不能被解释和处理[9][10]。


  由于常见网络代理多为HTTP代理,只容许HTTP协议类型的数据通过,因此,对HTTP隧道技术的研究有助于我们深入理解该技术。


  HTTP协议基于请求/响应模式,也可以称之为客户/服务器模式。当客户机想要请求获取服务时,会首先与目标服务器建立通信连接,然后给服务器发送一个请求,请求的格式一般都包括:统一资源标识符、协议的版本号(如:HTTP 1.0或HTTP 1.1)、客户机信息等内容。当服务器接收到请求后,会返回相应的响应请求信息。


  HTTP协议中对客户机和服务器之间通信方法的定义很明确,这些方法包括GET、POST、PUT、HEAD、OPTIONS、TRACE等。而这些方法都可以用于传输数据,常用的是GET和POST方法。其中GET方法是向HTTP服务器请求数据的方法,而POST方法是向HTTP服务器提交数据的方法。


  下面我们就以常用的GET方法对HTTP隧道的实现方法进行简单的说明。


  以下是一个很常见的GET请求:


  GET http://www.nettest.org/indexapp.php?value=10101010 HTTP/1.0(请求的地址)


  Host:www.nettest.org(目标服务器)


  User-Agent:Mozilla/5.0(用户代理)


  Accept:text/html(支持的页面格式)


  Accept-Language:en(支持的语言)


  Accept-Charset:IS0-8859-l,utf-8(支持的编码方式)


  Connection:Keep-Alive(保持和HTTP服务器的连接)


  Proxy-Connection:Keep-Alive(保持和代理服务器的连接)


  如过没有特别进行说明,我们很难发现数据“10101010”就隐藏在GET请求数据包中。如果精心设计隐藏数据的位置就可以有效抵抗协议分析。这个数据隐藏位置包括URI请求字串、“User-Agent”域值中、虚假的字符集、扩充头域等。


  通过上面的简单分析,我们可以看出基于HTTP隧道的通信具有很强的隐蔽性,因为很难区分清通信数据中是正常的请求数据还是隐藏的数据,这也为针对HTTP隧道的数据检测带来了相当大的难度。如果“10101010”是加密后的数据,对数据检测来说难度就更大。


  1.3.2 HTTP隧道分类


  HTTP隧道通常采用C/S(客户/服务器)模式。目前网络上利用HTTP隧道技术实现通信部分的工具有很多,其通信部分采用的主要的体系结构基本可以划分为三种类型,一是CGI脚本型,二是代理服务型,三是HTTP服务型。下面我们对三种类型进行逐一分析。


  1.3.1.1 CGI脚本型


  采用CGI脚本型隧道的工具体系结构如图1-1 CGI脚本型隧道工具所示,其隧道通信的基本交互过程分为以下四步:


  (1)隧道的服务端运行在HTTP服务器上,主要功能由CGI脚本实现。


  (2)当隧道客户端向HTTP服务器发起请求连接时,会利用HTTP头,如


  URI中的请求字符串等来携带真实数据。


  (3)当服务端运行的CGI脚本程序接收到请求消息时,会创建一个新的会话管理进程来处理该请求,然后会将处理结果返回给CGI脚本程序。


  (4)然后HTTP服务器会将CGI脚本的响应消息返回给隧道的客户端,从而完成一次会话。


  1.3.1.2 HTTP服务型


  采用HTTP服务型隧道的工具体系结构如图1-2 HTTP服务型隧道工具所示,其隧道通信的基本交互过程分为以下三步:


  (1)隧道的服务端把自己伪装成网络中正常的HTTP服务器,并侦听80端口。


  (2)当隧道的客户端向隧道的服务端发起请求连接时,会利用HTTP头,如


  URI中的请求字符串等来携带真实数据。


  (3)隧道的服务端在接收到该请求后,会解析出真实数据,并将数据发送给应用服务器,在接收到应用服务器的HTTP响应消息后,再对隧道的客户端反馈相应的处理结果,从而完成一次会话。


  1.3.1.3代理服务型


  采用代理服务型隧道的工具体系结构如图1-3代理服务型隧道工具所示,其隧道通信的基本交互过程分为以下四步:


  (1)隧道的服务端把自己伪装成网络中正常的代理服务器,并侦听某个TCP端口(如3128,8080等常用代理端口),其功能也与网络中一般代理服务器的功能类似。


  (2)当隧道的客户端通过隧道的服务端向任意HTTP服务器发起连接请求时,会利用HTTP头,如URI中的请求字符串等来携带真实数据。


  (3)当隧道的服务端接收到请求消息后,会提取真实数据,并将该数据转发给应用服务器,或者自己解析后将该请求转发给指定的HTTP应用务器。


  之后隧道的服务端在接收到HTTP应用服务器的响应信息后,在将信息进行处理后(或者直接)转发给隧道的客户端,从而完成一次会话。


上一篇 HTTP代理服务器的种类 下一篇 HTTP代理服务器原理研究