一、HTTP代理的匿名性ThisisaproxythathidestheoriginalusersIPaddressandotherdetailsfromtheremoteserver.这种代理,对远端服务器隐藏原始用户的IP地址以及其它细节(可能,但不必需)。
HTTP代理匿名性是指不通过非常技术手段,直接使用时代理的匿名安全性。(说明:这里的匿名与其它如FTP服务器的匿名意义是不一样的,不论匿名与否,代理服务器均能起到“代理”的作用。只是匿名代理可以确保被访问方不能追溯到源IP,在一定程度上更加安全而已。这并不是一个重要的指标,是否必要则仁者见仁、智者见智。)
测试自己的
对于HTTP代理,不少人有认识上的误区,有必要说明一下,不是所有的HTTP代理都只能代理HTTP的,viceversa!
HTTPCONNECT代理服务器是一种能够允许用户建立TCP连接到任何端口的代理服务器,这意味着这种代理不仅可用于HTTP,还包括FTP、IRC、RM流服务等,甚至扫描、***。三、三种代理的区别
·全匿名代理 不改变你的requestfields,使服务器端看来就像有个真正的客户浏览器在访问它。当然,你的真实IP是隐藏起来的。服务器的网管不会认为你使用了代理。
·普通匿名代理 能隐藏你的真实IP,但会更改你的requestfields,有可能会被认为使用了代理,但仅仅是可能,一般说来是没问题的。不过不要受它的名字的误导,其安全性可能比全匿名代理更高,有的代理会剥离你的部分信息(就好比防火墙的stealthmode),使服务器端探测不到你的操作系统版本和浏览器版本。
·透明代理(简单代理) 改编你的requestfields,并会传送真实IP跳板是一个程序,也可以说是一种socks5代理的应用吧。*从本地机器连接到远程机器,中间通过安装的代理跳板。对应用程序而言,相当于普通的sock代理调用。*在跳板之间传输的数据,是已经被动态加密的。加密种子每次不同。*跳板的数目由1到,不限制,当数目为0时,相当于Sock5代理服务器。代理格式的含义以10.48.72.2:80
VER
NMETHODS
METHODS
+----+----------+----------+
1
1
1to
+----+----------+----------+
VER(版本)在这个协议版本中被设置为X05。NMETHODS(方法选择)中包含在METHODS(方法)中出现的方法标识八位组的数目。
服务器从METHODS给出的方法中选出一种,发送一个METHODselection(方法选择)报文:
+----+--------+
VER
METHOD
+----+--------+
1
1
+----+--------+
如果所选择的METHOD的值是XFF,则客户机所列出的方法是没有可以被接受的,客户机就必须关闭连接。当前被定义的METHOD的值有:
X00无验证需求
X01通用安全服务应用程序接口(GSSAPI)
X02用户名/密码(USERNAME/PASSWORD)
X03至X7FIANA分配(IANAASSIGNED)
X80至XFE私人方法保留(RESERVEDFORPRIVATEMETHODS)
XFF无可接受方法(NOACCEPTABLEMETHODS)***IANA是负责全球INTERNET上的IP地址进行编号分配的机构(译者著)***
于是客户机和服务器进入方法细节的子商议。方法选择子商议另外描述于独立的文档中。
欲得到该协议新的METHOD支持的开发者可以和IANA联系以求得到METHOD号。已分配号码的文档需要参考METHOD号码的当前列表和它们的通讯协议。
如果想顺利的执行则必须支持GSSAPI和支持用户名/密码(USERNAME/PASSWORD)认证方法。4.需求
一旦方法选择子商议结束,客户机就发送请求细节。如果商议方法包括了完整性检查的目的和/或机密性封装,则请求必然被封在方法选择的封装中。SOCKS请求如下表所示:
+----+-----+-------+------+----------+----------+
VER
CMD
RSV
ATYP
DST.ADDR
DST.PORT
+----+-----+-------+------+----------+----------+
1
1
X00
1
Variable
2
+----+-----+-------+------+----------+----------+其中: oVERprotocolversion:X05 oCMD oCONNECTX01 oBINDX02 oUDPASSOCIATEX03 oRSVRESERVED oATYPaddresstypeoffollowingaddress oIPV4address:X01 oDOMAINNAME:X03 oIPV6address:X04 oDST.ADDRdesireddestinationaddress oDST.PORTdesireddestinationportinnetworkoctetorder5.地址
在地址域(DST.ADDR,BND.ADDR)中,ATYP域详细说明了包含在该域内部的地址类型:
oX01
该地址是IPv4地址,长4个八位组。
oX03
该地址包含一个完全的域名。第一个八位组包含了后面名称的八位组的数目,没有中止的空八位组。
oX04
该地址是IPv6地址,长16个八位组。6.回应
到SOCKS服务器的连接一经建立,客户机即发送SOCKS请求信息,并且完成认证商议。服务器评估请求,返回一个回应如下表所示:
+----+-----+-------+------+----------+----------+
VER
REP
RSV
ATYP
BND.ADDR
BND.PORT
+----+-----+-------+------+----------+----------+
1
1
X00
1
Variable
2
+----+-----+-------+------+----------+----------+其中:
oVERprotocolversion:X05
oREPReplyfield:
oX00succeeded
oX01generalSOCKSserverfailure
oX02connectionnotallowedbyruleset
oX03Networkunreachable
oX04Hostunreachable
oX05Connectionrefused
oX06TTLexpired
oX07Commandnotsupported
oX08Addresstypenotsupported
oX09toXFFunassigned
oRSVRESERVED
oATYPaddresstypeoffollowingaddress
oIPV4address:X01
oDOMAINNAME:X03
oIPV6address:X04oBND.ADDRserverboundaddressoBND.PORTserverboundportinnetworkoctetorder标志RESERVED(RSV)的地方必须设置为X00。
如果被选中的方法包括有认证目的封装,完整性和/或机密性的检查,则回应就被封装在方法选择的封装套中。CONNECT
在CONNECT的回应中,BND.PORT包括了服务器分配的连接到目标主机的端口号,同时BND.ADDR包含了关联的IP地址。此处所提供的BND.ADDR通常情况不同于客户机连接到SOCKS服务器所用的IP地址,因为这些服务器提供的经常都是多址的(muti-homed)。都期望SOCKS主机能使用DST.ADDR和DST.PORT,连接请求评估中的客户端源地址和端口。BIND
BIND请求被用在那些需要客户机接受到服务器连接的协议中。FTP就是一个众所周知的例子,它通过使用命令和状态报告建立最基本的客户机-服务器连接,按照需要使用服务器-客户端连接来传输数据。(例如:ls,get,put)都期望在使用应用协议的客户端在使用CONNECT建立首次连接之后仅仅使用BIND请求建立第二次连接。都期望SOCKS主机在评估BIND请求时能够使用ST.ADDR和DST.PORT。
有两次应答都是在BIND操作期间从SOCKS服务器发送到客户端的。第一次是发送在服务器创建和绑定一个新的socket之后。BIND.PORT域包含了SOCKS主机分配和侦听一个接入连接的端口号。BND.ADDR域包含了关联的IP地址。
客户端具有代表性的是使用这些信息来通报应用程序连接到指定地址的服务器。第二次应答只是发生在预期的接入连接成功或者失败之后。在第二次应答中,BND.PORT和BND.ADDR域包含了欲连接主机的地址和端口号。UDPASSOCIATE(连接?)
UDP连接请求用来建立一个在UDP延迟过程中操作UDP数据报的连接。DST.ADDR和DST.PORT域包含了客户机期望在这个连接上用来发送UDP数据报的地址和端口。服务器可以利用该信息来限制至这个连接的访问。如果客户端在UDP连接时不持有信息,则客户端必须使用一个全零的端口号和地址。
当一个含有UDP连接请求到达的TCP连接中断时,UDP连接中断。
在UDP连接请求的回应中,BND.PORT和BND.ADDR域指明了客户端需要被发送UDP请求消息的端口号/地址。回应过程
当一个回应(REP值非X00)指明失败时,SOCKS主机必须在发送后马上中断该TCP连接。该过程时间必须为在侦测到引起失败的原因后不超过10秒。
如果回应代码(REP值为X00)时,则标志成功,请求或是BIND或是CONNECT,客户机现在就可以传送数据了。如果所选择的认证方法支持完整性、认证机制和/或机密性的封装,则数据被方法选择封装包来进行封装。类似,当数据从客户机到达SOCKS主机时,主机必须使用恰当的认证方法来封装数据。7.基于UDP客户机的程序
一个基于UDP的客户端必须使用在BND.PORT中指出的UDP端口来发送数据报到UDP延迟服务器,而该过程是作为对UDP连接请求的回应而进行的。如果所选择的认证方法提供认证机制、完整性、和/或机密性,则数据报必须使用恰当的封装套给予封装。每一个UDP数据报携带一个UDP请求的报头(header):
+----+------+------+----------+----------+----------+
RSV
FRAG
ATYP
DST.ADDR
DST.PORT
DATA
+----+------+------+----------+----------+----------+
2
1
1
Variable
2
Variable
+----+------+------+----------+----------+----------+UDP请求报头是:oRSVReservedXoFRAGCurrentfragmentnumberoATYPaddresstypeoffollowingaddresses:oIPV4address:X01oDOMAINNAME:X03oIPV6address:X04oDST.ADDRdesireddestinationaddressoDST.PORTdesireddestinationportoDATAuserdata
当一个UDP延迟服务器决定延迟一个UDP数据报时,它会按兵不动,对客户机无任何通报。类似的,它会将它不能或不打算延迟的数据报Drop?掉。当一个UDP延迟服务器接收到一个来自远程主机的延迟数据报,它必须使用上面的UDP请求报头来封装该数据报,和任何认证方法选择的封装。
一个UDP延迟服务器必须从SOCKS服务器获得所期望的客户机的IP地址,而该客户机要发送数据报到BND.PORT--在至UDP连接的回应中已经给出。UDP延迟服务器还必须drop掉除了特定连接中的一条记录之外的其它的所有源IP地址。
FRAG域指出了数据报是否为大量的数据片(flagments)中的一片。如果标明了,高序(high-order)位说明是序列的结束段,而值为X00则说明该数据报是独立的。值介于1-之间片断位于数据片序列中间。每一个接收端都有一个和庑┦据片相关的重组队列?REASSEMBLYQUEUE)和一个重组时间表(REASSEMBLYTIMER)。重组队列必须被再次初始化并且相关联的数据片必须被丢掉,而无论该重组时间表是否过期,或者一个新的携带FRAG域的数据报到达,并且FRAG域的值要小于正在进行的数据片序列中的FRAG域的最大值。且重组时间表必须不少于5秒。无论如何最好避免应用程序直接与数据片接触(?)。
数据片的执行是可选的,一个不支持数据片的执行必须drop掉任何除了FRAG域值为X00了数据报。
一个利用SOCKS的UDP程序接口必须预设有效的缓冲区来装载数据报,并且系统提供的实际缓冲区的空间要比数据报大:oifATYPisX01-10+method_dependentoctetssmalleroifATYPisX03-+method_dependentoctetssmalleroifATYPisX04-20+method_dependentoctetssmaller8.安全考虑
该文档描述了一个应用层的用于穿越IP网络防火墙的协议。这种穿越的安全性是高度依赖于正规的认证和正规执行方法提供的有效封装,以及在SOCKS客户端和SOCKS服务端所选择的安全性,还有管理员对认证方法选项所作的小心周密的考虑。9.参考文献[1]Koblas,D.,SOCKS,Proceedings:UsenixSecuritySymposium.各种代理软件下载地址[分享]从现在开始寻找、更新各种代理相关的软件,并且公布软件的官方下载地址和网站。代理猎手(ProxyHunter)V3.1完整版主页:无下载