-

国外socks5免费代理ip地址
2023年4月19日发(作者:mse杀毒软件官网)socks5协议代理解析
笔者在实际学习中,由于在有些软件⽤到了socks5(oicq,icq),对其原理不

甚了解,相信很多朋友对其也不是很了解,于是仔细研读了⼀下rfc1928,觉得有必要

译出来供⼤家参考。

1.介绍:

防⽕墙的使⽤,有效的隔离了机构的内部⽹络和外部⽹络,这种类型的Internet

架构变得越来越流⾏。这些防⽕墙系统⼤都充当着⽹络之间的应⽤层⽹关的⾓⾊,通

常提供经过控制的Telnet,FTP,SMTP访问。为了推动全球信息的交流,更多的新的应

⽤层协议的推出。这就有必要提供⼀个总的架构使这些协议能够更明显和更安全的穿

过防⽕墙。也就有必要在实际上为它们穿过防⽕墙提供⼀个更强的认证机制。这种需

要源于客户机-服务器联系在不同组织⽹络之间的实现,⽽这种联系需要被控制和是很

⼤程度上被认证的。

该协议被描述为⽤来提供在TCPUDP域下为客户机-服务器应⽤程序便利和安全的

穿过防⽕墙的⼀个架构。该协议在概念上被描述为⼀个介于应⽤层和传输层之间的"

离层",但是这类服务并不提供⽹络层⽹关服务,如ICMP报⽂的传输。

2.现状:

SOCKS 4为基于TCP的客户机-服务器应⽤程序提供了⼀种不安全的穿越防⽕墙的机

制,包括TELNET,FTP和当前最流⾏的信息发现协议如HTTP,WAISGOPHER.

新协议为了包括UDP扩展了SOCKS 4,为了包括对总体上更强的认证机制的⽀持扩

展了协议架构,为了包括域名和IPv6地址的⽀持扩展了地址集。

SOCKS协议执⾏最具代表性的是包括了在SOCKS库中利⽤适当的封装程序来对基于

TCP的客户程序进⾏重编译和重链结。

注意:

除⾮特别提及,封装在包格式中的⼗进制数表⽰的是通讯域的长度(⽤⼋位组

octect表⽰)。⼀个给定的⼋位组必须具有指定的值,格式X'hh'被⽤来表⽰在该域中

单个⼋位组的值。当单词"变量Variable"被使⽤时,它指出了通讯域拥有⼀个可变长

度,这个可变长度要么由⼀个联合的(⼀个或两个⼋位组)长度域定义,要么由⼀个数

据类型域所定义。

3.基于TCP客户机的程序

当⼀台基于TCP的客户机希望和⽬标主机建⽴连接时,⽽这台⽬标主机只有经过防

⽕墙才能到达(这种情况?⼀直持续到?它被执⾏时),它就必须在SOCKS服务器端的适

当的SOCKS端⼝打开⼀个TCP连结。SOCKS服务按常例来说定位于TCP端⼝1080。如果连

接请求成功,客户机为即将使⽤的认证⽅式进⾏⼀种协商,对所选的⽅式进⾏认证,

然后发送⼀个转发请求。SOCKS服务器对该请求进⾏评估,并且决定是否建⽴所请求转

发的连接。

客户机连接到服务器,发送⼀个版本标识/⽅法选择报⽂:

+----+----------+----------+

|VER | NMETHODS | METHODS |

+----+----------+----------+

| 1 | 1 | 1 to 255 |

+----+----------+----------+

VER(版本)在这个协议版本中被设置为X'05'NMETHODS(⽅法选择)中包含在

METHODS(⽅法)中出现的⽅法标识⼋位组的数⽬。


服务器从METHODS给出的⽅法中选出⼀种,发送⼀个METHOD selection(⽅法选择

)报⽂:

+----+--------+

|VER | METHOD |

+----+--------+

| 1 | 1 |

+----+--------+

如果所选择的METHOD的值是X'FF',则客户机所列出的⽅法是没有可以被接受的,

客户机就必须关闭连接。

当前被定义的METHOD的值有:

>> X'00' ⽆验证需求

>> X'01' 通⽤安全服务应⽤程序接⼝(GSSAPI)

>> X'02' ⽤户名/密码(USERNAME/PASSWORD)

>> X'03' X'7F' IANA 分配(IANA ASSIGNED)

>> X'80' X'FE' 私⼈⽅法保留(RESERVED FOR PRIVATE METHODS)

>> X'FF' ⽆可接受⽅法(NO ACCEPTABLE METHODS)

***IANA是负责全球INTERNET上的IP地址进⾏编号分配的机构(译者著)***

于是客户机和服务器进⼊⽅法细节的⼦商议。⽅法选择⼦商议另外描述于独⽴的

⽂档中。

欲得到该协议新的METHOD⽀持的开发者可以和IANA联系以求得到METHOD号。已分

配号码的⽂档需要参考METHOD号码的当前列表和它们的通讯协议。

如果想顺利的执⾏则必须⽀持GSSAPI和⽀持⽤户名/密码(USERNAME/PASSWORD)

证⽅法。

4.需求

⼀旦⽅法选择⼦商议结束,客户机就发送请求细节。如果商议⽅法包括了完整性

检查的⽬的和/或机密性封装,则请求必然被封在⽅法选择的封装中。

SOCKS请求如下表所⽰:

+----+-----+-------+------+----------+----------+

|VER | CMD | RSV | ATYP | | |

+----+-----+-------+------+----------+----------+

| 1 | 1 | X'00' | 1 | Variable | 2 |

+----+-----+-------+------+----------+----------+

其中:

o VER protocol versionX'05'

o CMD

o CONNECT X'01'

o BIND X'02'

o UDP ASSOCIATE X'03'

o RSV RESERVED

o ATYP address type of following address

o IP V4 address: X'01'

o DOMAINNAME: X'03'

o IP V6 address: X'04'

o desired destination address

o desired destination port in network octet order


5.地址

在地址域(,)中,ATYP域详细说明了包含在该域内部的地址类型



o X'01'

该地址是IPv4地址,长4个⼋位组。

o X'03'

该地址包含⼀个完全的域名。第⼀个⼋位组包含了后⾯名称的⼋位组的数⽬,没

有中⽌的空⼋位组。

o X'04'

该地址是IPv6地址,长16个⼋位组。

6.回应

SOCKS服务器的连接⼀经建⽴,客户机即发送SOCKS请求信息,并且完成认证商

议。服务器评估请求,返回⼀个回应如下表所⽰:

+----+-----+-------+------+----------+----------+

|VER | REP | RSV | ATYP | | |

+----+-----+-------+------+----------+----------+

| 1 | 1 | X'00' | 1 | Variable | 2 |

+----+-----+-------+------+----------+----------+

其中:

o VER protocol version: X'05'

o REP Reply field:

o X'00' succeeded

o X'01' general SOCKS server failure

o X'02' connection not allowed by ruleset

o X'03' Network unreachable

o X'04' Host unreachable

o X'05' Connection refused

o X'06' TTL expired

o X'07' Command not supported

o X'08' Address type not supported

o X'09' to X'FF' unassigned

o RSV RESERVED

o ATYP address type of following address

o IP V4 address: X'01'

o DOMAINNAME: X'03'

o IP V6 address: X'04'

o server bound address

o server bound port in network octet order

标志RESERVED(RSV)的地⽅必须设置为X'00'

如果被选中的⽅法包括有认证⽬的封装,完整性和/或机密性的检查,则回应就被

封装在⽅法选择的封装套中。


CONNECT

CONNECT的回应中,包括了服务器分配的连接到⽬标主机的端⼝号,同

包含了关联的IP地址。此处所提供的通常情况不同于客户机连接

SOCKS服务器所⽤的IP地址,因为这些服务器提供的经常都是多址的(muti-homed)

都期望SOCKS主机能使⽤,连接请求评估中的客户端源地址和端⼝



BIND

BIND请求被⽤在那些需要客户机接受到服务器连接的协议中。FTP就是⼀个众所周

知的例⼦,它通过使⽤命令和状态报告建⽴最基本的客户机-服务器连接,按照需要使

⽤服务器-客户端连接来传输数据。(例如:ls,get,put)

都期望在使⽤应⽤协议的客户端在使⽤CONNECT建⽴⾸次连接之后仅仅使⽤BIND请求建

⽴第⼆次连接。都期望SOCKS主机在评估BIND请求时能够使⽤

有两次应答都是在BIND操作期间从SOCKS服务器发送到客户端的。第⼀次是发送在

服务器创建和绑定⼀个新的socket之后。域包含了SOCKS主机分配和侦听⼀

个接⼊连接的端⼝号。域包含了关联的IP地址。 客户端具有代表性的是

使⽤这些信息来通报应⽤程序连接到指定地址的服务器。第⼆次应答只是发⽣在预期

的接⼊连接成功或者失败之后。在第⼆次应答中,域包含了欲连

接主机的地址和端⼝号。

UDP ASSOCIATE(连接?)

UDP 连接请求⽤来建⽴⼀个在UDP延迟过程中操作UDP数据报的连接。

域包含了客户机期望在这个连接上⽤来发送UDP数据报的地址和端⼝。服务器

可以利⽤该信息来限制⾄这个连接的访问。如果客户端在UDP连接时不持有信息,则客

户端必须使⽤⼀个全零的端⼝号和地址。

当⼀个含有UDP连接请求到达的TCP连接中断时,UDP连接中断。

UDP连接请求的回应中,域指明了客户端需要被发送UDP

求消息的端⼝号/地址。

回应过程

当⼀个回应(REP值⾮X'00')指明失败时,SOCKS主机必须在发送后马上中断该TCP

连接。该过程时间必须为在侦测到引起失败的原因后不超过10秒。

如果回应代码(REP值为X'00')时,则标志成功,请求或是BIND或是CONNECT,客户

机现在就可以传送数据了。如果所选择的认证⽅法⽀持完整性、认证机制和/或机密性

的封装,则数据被⽅法选择封装包来进⾏封装。类似,当数据从客户机到达SOCKS主机

时,主机必须使⽤恰当的认证⽅法来封装数据。

7.基于UDP客户机的程序

⼀个基于UDP的客户端必须使⽤在中指出的UDP端⼝来发送数据报到UDP

迟服务器,⽽该过程是作为对UDP连接请求的回应⽽进⾏的。如果所选择的认证⽅法提

供认证机制、完整性、和/或机密性,则数据报必须使⽤恰当的封装套给予封装。每⼀

UDP数据报携带⼀个UDP请求的报头(header):

+----+------+------+----------+----------+----------+

|RSV | FRAG | ATYP | | | DATA |


+----+------+------+----------+----------+----------+

| 2 | 1 | 1 | Variable | 2 | Variable |

+----+------+------+----------+----------+----------+

UDP请求报头是:

o RSV Reserved X'0000'

o FRAG Current fragment number

o ATYP address type of following addresses:

o IP V4 address: X'01'

o DOMAINNAME: X'03'

o IP V6 address: X'04'

o desired destination address

o desired destination port

o DATA user data

当⼀个UDP延迟服务器决定延迟⼀个UDP数据报时,它会按兵不动,对客户机⽆任

何通报。类似的,它会将它不能或不打算延迟的数据报Drop?掉。当⼀个UDP延迟服务

器接收到⼀个来⾃远程主机的延迟数据报,它必须使⽤上⾯的UDP请求报头来封装该数

据报,和任何认证⽅法选择的封装。

⼀个UDP延迟服务器必须从SOCKS服务器获得所期望的客户机的IP地址,⽽该客户

机要发送数据报到--在⾄UDP连接的回应中已经给出。UDP延迟服务器还必须

drop掉除了特定连接中的⼀条记录之外的其它的所有源IP地址。

FRAG域指出了数据报是否为⼤量的数据⽚(flagments)中的⼀⽚。如果标明了,⾼

(high-order)位说明是序列的结束段,⽽值为X'00'则说明该数据报是独⽴的。值介

1-127之间⽚断位于数据⽚序列中间。每⼀个接收端都有⼀个和这些数据⽚相关的重

组队列表(REASSEMBLY QUEUE)和⼀个重组时间表(REASSEMBLY TIMER)。重组队列必须

被再次初始化并且相关联的数据⽚必须被丢掉,⽽⽆论该重组时间表是否过期,或者

⼀个新的携带FRAG域的数据报到达,并且FRAG域的值要⼩于正在进⾏的数据⽚序列中

FRAG域的最⼤值。且重组时间表必须不少于5秒。⽆论如何最好避免应⽤程序直接与

数据⽚接触()

数据⽚的执⾏是可选的,⼀个不⽀持数据⽚的执⾏必须drop掉任何除了FRAG域值

X'00'了数据报。

⼀个利⽤SOCKSUDP程序接⼝必须预设有效的缓冲区来装载数据报,并且系统提

供的实际缓冲区的空间要⽐数据报⼤:

o if ATYP is X'01' - 10+method_dependent octets smaller

o if ATYP is X'03' - 262+method_dependent octets smaller

o if ATYP is X'04' - 20+method_dependent octets smaller

8.安全考虑

该⽂档描述了⼀个应⽤层的⽤于穿越IP⽹络防⽕墙的协议。这种穿越的安全性是

⾼度依赖于正规的认证和正规执⾏⽅法提供的有效封装,以及在SOCKS客户端和SOCKS

服务端所选择的安全性,还有管理员对认证⽅法选项所作的⼩⼼周密的考虑。

-

国外socks5免费代理ip地址

更多推荐

国外socks5免费代理ip地址