精华内容
下载资源
问答
  • socks5

    2020-10-20 14:29:55
    SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求...

    SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。SOCKS5 服务器通过将前端发来的请求转发给真正的目标服务器模拟了一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。

    SOCKS5服务器在将通讯请求发送给真正服务器的过程中,对于请求数据包本身不加任何改变。SOCKS5服务器接收到真正服务器的响应后,也原样转发给前端。因此,SOCKS5 协议是一种代理协议,对于各种基于 TCP/IP的应用层协议都能够适应,几乎是万能的。它虽然不能理解自己转发的数据的内部结构,但是它能够忠实地转发通讯包,完成协议本来要完成的功能。

    与SOCKS5协议不同,HTTP代理是通过HTTP协议进行的,HTTP代理服务器软件了解通讯包的内部结构,在转发过程中还要对通讯进行某种程度的修改和转换。和HTTP代理协议不同,SOCKS5实际上是一个传输层的代理协议。我们可以想象,如果每个具体的应用层协议都要设计对应的代理协议表达办法,一个特定的代理服务器无论如何也支持不过来那么多新出现的协议。因此,可以说SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局面。不过,并不是凡是使用基于TCP/IP协议的应用协议的软件,都可以无条件地透过SOCKS5服务器进行通讯,还要求前端软件本身具有SOCKS5的接口,才能利用SOCKS5代理服务器。

    展开全文
  • SOCKS5

    2020-07-08 09:48:26
    SOCKS5发展及现状: 网络发展到今天,SOCKS5也历经了几次大的修改。 现在SOCKS5通过特殊方法,可以实现以下功能: 1.局部指定进程使用SOCKS5访问网络。 2.全局访问网络。也就是让电脑上所有流量都走SOCKS5. 3.网络...

    SOCKS5发展及现状:

    网络发展到今天,SOCKS5也历经了几次大的修改。

    现在SOCKS5通过特殊方法,可以实现以下功能:

    1.局部指定进程使用SOCKS5访问网络。

    2.全局访问网络。也就是让电脑上所有流量都走SOCKS5.

    3.网络加速功能,就是玩国外的一些游戏的时候,网络卡,可以使用SOCKS5加速。

    4.可以让每个进程不同IP,即在电脑上多开游戏或者多开模拟器,或者其它进程等,可以让每个进程不同外网IP来访问网络。

    最初象我们,08年研究的时候,那个时候用HOOK API,也就是HOOK CONNECT WSACONNECT来拦截网络,然后使用SOCKS5转发出去,实现上述的4项功能。

    后来一些游戏啊,一些网络应用程序自己构造了一些API,如NP保护的游戏,这类应用使用HOOK API就不行了。所以在10年左右,就开始使用了LSP来拦截WSPAccept,
    WSPAddressToString,
    WSPAsyncSelect,
    WSPBind,
    WSPCancelBlockingCall,
    WSPCleanup,
    WSPCloseSocket,
    WSPConnect,
    WSPDuplicateSocket,
    WSPEnumNetworkEvents,
    WSPEventSelect,
    WSPGetOverlappedResult,
    WSPGetPeerName,
    WSPGetSockName,
    WSPGetSockOpt,
    WSPGetQOSByName,
    WSPIoctl,
    WSPJoinLeaf,
    WSPListen,
    WSPRecv,
    WSPRecvDisconnect,
    WSPRecvFrom,
    WSPSelect,
    WSPSend,
    WSPSendDisconnect,
    WSPSendTo,
    WSPSetSockOpt,
    WSPShutdown,
    WSPSocket,
    WSPStringToAddress等,然后根据规则用SOCKS5代理协议转发网络。LSP相对来讲,当时是应用层里比较好的拦截网络方式,同样也实现了以上4种功能。

    截止到目前,因为大部分游戏或者网络应用都会检测自己进程是否被注入,是否读写了内存。因为HOOK API及LSP,都是要给进程加载一个DLL,所以这两种方法已经不适合现在的环境。现在都是用驱动WFP TDI或者NDIS来拦截网络数据,然后应用层与驱动通信,通过规则用SOCKS5来交换网络数据,实现上述的4种功能或者其它功能。

    本人研究网络多年,希望结交志同道合的朋友。博客里已经有一个文章写有详细的原理及实现的成品软件及部分代码。

    可以参考https://blog.csdn.net/QQ1289671197/article/details/102532889

    下面介绍SOCKS5详细原理:

    解释一下为什么它被称之为SOCKS。其实该协议设计之初是为了让有权限的用户可以穿过过防火墙的限制,使得高权限用户可以访问一般用户不能访问的外部资源。当时设计者考虑到几乎所有使用TCP/IP通信的应用软件都使用socket(套接字,实际上是一组应用程序接口)完成底层的数据通信。为了方便软件开发者使用该协议,协议设计者就刻意对应了几组socket编程最经典的操作,并且将协议定名为SOCKS。

    最先被广泛使用的SOCKS协议是其第四版本,就是SOCKS4。IE和一些其他应用程序直接用“Socks”表示SOCKS4协议。该版本支持TCP的connect(作为客户端连接)和listen(打开一个监听端口),不支持UDP协议。SOCKS4A对SOCKS4作了一点增强,即允许客户端将域名发送给SOCKS服务器,让SOCKS服务器进行域名解析。

    SOCKS5是第五版,相对第四版作了大幅度的增强。首先,它增加了对UDP协议的支持;其次,它可以支持多种用户身份验证方式和通信加密方式;最后,修改了SOCKS服务器进行域名解析的方法,使其更加优雅。经过这次脱胎换骨的升级,SOCKS5于1996年被IETF确认为标准通信协议,RFC编号为1928。经过10余年的时间,大量的网络应用程序都支持SOCKS5代理。

    SOCKS5虽然可以支持多种用户身份验证方式,但是应用程序真正实现的一般也只有两种:不验证和用户名密码验证。所以大多数应用程序SOCKS5代理设置也只有用户名/密码这一种可选验证方法。另外,尽管从SOCKS4开始,就支持打开TCP监听端口,但是直到SOCKS5,也只允许这个端口接收一个客户端连接。因此网络服务提供者(如http服务器)不能使用SOCKS。实际上,很多SOCKS服务器的实现也不支持打开TCP监听端口。

    虽然说设计SOCKS协议的初衷是在保证网络隔离的情况下,提高部分人员的网络访问权限,但是国内似乎很少有组织机构这样使用。一般情况下,大家都会使用更新的网络安全技术来达到相同的目的,人们找到了SOCKS协议新的用途——突破网络通信限制,这和该协议的初衷实际上正好相反。比如某些网游的部分服务器设置为只接收部分地区的IP地址的连接。为了突破这种限制,可以找一个该地区的SOCKS5代理服务器,然后用PSD接管网游客户端,通过SOCKS5代理服务器连接游戏服务器。这样游戏服务器就会认为该客户端位于本地区,从而允许进行游戏。还有一种情况是:防火墙仅允许部分端口(如http的80端口)通信,那么可以利用SOCKS5协议和一个打开80端口监听的SOCKS5服务器连接,从而可以连接公网上其他端口的服务器。利用一些额外的技术手段,甚至可以骗过内部的http代理服务器,这时在使用内网http代理上网的环境下也可以不受限制的使用网络服务,这称之为SOCKS over HTTP。

    当然,使用代理服务器后,将不可避免的出现通信延迟,所以应该尽量选择同网络(指网通/ 电信),距离近的服务器。

    sock5代理的工作程序是:
    1.需要向代理方服务器发出请求信息。

    2.代理方应答

    3.需要代理方接到应答后发送向代理方发送目的ip和端口

    4.代理方与目的连接

    5.代理方将需要代理方发出的信息传到目的方,将目的方发出的信息传到需要代理方。代理完成。
    由于网上的信息传输都是运用tcp或udp进行的,所以使用socks5代理可以办到网上所能办到的一切,而且不舆目的方会查到你的ip,既安全又方便 sock5支持UDP和TCP,但两种代理是有区别的,以下分类说明

    如何用代理TCP协议
    1.向服务器的1080端口建立tcp连接。

    2.向服务器发送 05 01 00 (此为16进制码,以下同)

    3.如果接到 05 00 则是可以代理

    4.发送 05 01 00 01 + 目的地址(4字节) + 目的端口(2字节),目的地址和端口都是16进制码(不是字符串!!)。 例202.103.190.27 -7201 则发送的信息为:05 01 00 01 CA 67 BE 1B 1C 21 (CA=202 67=103 BE=190 1B=27 1C21=7201)

    5.接受服务器返回的自身地址和端口,连接完成

    6.以后操作和直接与目的方进行TCP连接相同。

    如何用代理UDP连接
    1.向服务器的1080端口建立udp连接

    2.向服务器发送 05 01 00

    3.如果接到 05 00 则是可以代理

    4.发送 05 03 00 01 00 00 00 00 + 本地UDP端口(2字节)

    5.服务器返回 05 00 00 01 +服务器地址+端口

    6.需要申请方发送 00 00 00 01 +目的地址IP(4字节)+目的端口 +所要发送的信息

    7.当有数据报返回时 向需要代理方发出00 00 00 01 +来源地址IP(4字节)+来源端口 +接受的信息

    注:此为不需要密码的代理协议,只是socks5的一部分,完整协议请RFC1928

    展开全文
  • Socks5

    2018-11-10 18:03:38
    文章目录RFC文档介绍`Socks5`协议通信过程`Socks5`身份认证BINDUDP ASSOCIATE 首先说一点,shadowsocks使用的就是socks5协议 RFC文档 SOCKS Protocol Version 5 Username/Password Authentication for SOCKS V5 介绍...


    首先说一点,shadowsocks使用的就是socks5协议

    RFC文档

    SOCKS Protocol Version 5

    Username/Password Authentication for SOCKS V5

    介绍

    socks5 is designed to provide a framework for client-server applications in both the TCP and UDP domains to conveniently and securely use the services of a network firewall

    socks5作为应用层和传输层的中间层不提供传输层以下的服务,比如网络层的ICMP报文是无法通过Socks5协议来进行转发的

    当防火墙后的客户端要访问外部的服务器时,就跟socks代理服务器连接。该协议设计之初是为了让有权限的用户可以穿过过防火墙的限制,使得高权限用户可以访问外部资源

    Socks5协议通信过程

    When a TCP-based client wishes to establish a connection to an object that is reachable only via a firewall (such determination is left up to the implementation), it must open a TCP connection to the appropriate SOCKS port on the SOCKS server system.

    现在我们的socks5服务位于TCP1080端口,Client成功与Server建立了TCP连接,这时Client便可以与Server协商认证方法,协商完成之后进行身份认证并发送转接请求,此时只有两种结果:认证成功拒绝请求

    Client首先给Server发送的信息格式如下

    +----+----------+----------+
    |VER | NMETHODS | METHODS  |
    +----+----------+----------+
    | 1  |    1     | 1 to 255 |
    +----+----------+----------+
    						1 to 255 表示该字段长度的范围为1~255字节
    

    VER:长度为1byte的版本号

    NMETHODS:表示Client提供的认证方法的数量

    METHODS:METHODS代号: X'hh'16进制表示

    • X’00’ NO AUTHENTICATION REQUIRED
    • X’01’ GSSAPI
    •         **X'02' USERNAME/PASSWORD**
      
    •         **X'03' to X'7F' IANA ASSIGNED**
      
    •         **X'80' to X'FE' RESERVED FOR PRIVATE METHODS**
      
    •         **X'FF' NO ACCEPTABLE METHODS**
      

    Server接收到Client的信息后,返回如下格式的响应消息:

    +----+--------+
    |VER | METHOD |
    +----+--------+
    | 1  |   1    |
    +----+--------+
    

    METHOD字段表示Server所选定的认证方法,若其值为X'FF',则表示Server什么认证方法都没有指定,此时ClientServer之间的连接会关闭

    Socks5身份认证

    The client and server then enter a method-specific sub-negotiation

    现在我们来查阅Username/Password Authentication for SOCKS V5 RFC 1929

    The protocol specification for SOCKS Version 5 specifies a generalized framework for the use of arbitrary authentication
    protocols in the initial socks connection setup. This document
    describes one of those protocols, as it fits into the SOCKS Version 5
    authentication “subnegotiation”
    .

    Once the SOCKS V5 server has started, and the client has selected the
    Username/Password Authentication protocol, the Username/Password
    subnegotiation begins

    This begins with the client producing a
    Username/Password request
    ,请求报文格式如下:

    +----+------+----------+------+----------+
    |VER | ULEN |  UNAME   | PLEN |  PASSWD  |
    +----+------+----------+------+----------+
    | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
    +----+------+----------+------+----------+
    						1 to 255 表示该字段长度的范围为1~255字节
    
    • VER:版本号
    • ULEN:用于表示UNAME字段的长度
    • UNAMEusername
    • PLEN:用于表示PASSWD字段的长度
    • PASSWDusername对应的password

    The server verifies the supplied UNAME and PASSWD, and sends the
    following response:

    +----+--------+
    |VER | STATUS |
    +----+--------+
    | 1  |   1    |
    +----+--------+
    

    STATUS字段值为X'00',则认证成功,除此之位的任何值均表示failure,此时ClientServer之间的连接将会关闭

    这种认证方式是有安全隐患的,用户名和密码都是明文传输的,如果攻击者渗透到了内网,则很容易嗅探到用户名和密码

    认证完成之后,ClientServer发送请求包,格式如下:

    +----+-----+-------+------+----------+----------+
    |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |
    +----+-----+-------+------+----------+----------+
    | 1  |  1  | X'00' |  1   | Variable |    2     |
    +----+-----+-------+------+----------+----------+
    
    • VER
    •    protocol version: X'05'
      
    •         **CMD**
      
      • CONNECT X’01’
      •           **BIND X'02'**
        
      •            **UDP ASSOCIATE X'03'**
        
    •         **RSV**   
      
      •          RESERVED,置零
        
    •       **ATYP**   (address type of following address)有以下三个值可以选择
      
      •            **IP V4 address: X'01'**
        
      •           **DOMAINNAME: X'03'**
        
      •          **IP V6 address: X'04'**
        
    •        **DST.ADDR**       
      
      •        desired destination address
        
    •        **DST.PORT** 
      
      •        desired destination port in network octet              order
        

    稍微提一下上面ATYPDOMAINNAME,如果指定了该选项,则后面的DST.ADDR字段中存放的是FQDN,它的第一个字节表示后面的FQDN占用的字节数,there is no terminating NUL octet*(octet表示8位一组)*

    Server对请求进行基于源和目的地址的审核之后会向Client发送一个或者多个响应报文,报文格式如下:

    +----+-----+-------+------+----------+----------+
    |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
    +----+-----+-------+------+----------+----------+
    | 1  |  1  | X'00' |  1   | Variable |    2     |
    +----+-----+-------+------+----------+----------+
    
    • VER
    • protocol version: X’05’
    •        **REP(应答结果)**:
      
      •           X'00' succeeded 
        
        •           X'01' general SOCKS server failure
          
        •           X'02' connection not allowed by ruleset
          
        •           X'03' Network unreachable
          
        •           X'04' Host unreachable
          
        •           X'05' Connection refused
          
        •           X'06' TTL expired
          
        •           X'07' Command not supported
          
        •           X'08' Address type not supported
          
        •           X'09' to X'FF' unassigned
          
    •        **RSV**    **(RESERVED)保留,置零**
      
    • ATYP (address type of following address)
      •           IP V4 address: X'01'
        
      •           DOMAINNAME: X'03'
        
      •           IP V6 address: X'04'
        
    •        **BND.ADDR**       **(server bound address)**
      
    •        **BND.PORT**      **(server bound port in network octet order)**
      

    下面我们按照Client请求中CMD的三个值来对响应报文进行讲解:

    CONNECT

    BND.PORTBND.ADDR的值与Client发给Server的报文中的DST.ADDRDST.PORT字段的值是相等的

    Client的源地址和目的地址用来进行请求审核

    BIND

    The BIND request is used in protocols which require the client to
    accept connections from the server. FTP is a well-known example,
    which uses the primary client-to-server connection for commands and
    status reports, but may use a server-to-client connection for
    transferring data
    on demand (e.g. LS, GET, PUT)

    It is expected that the client side of an application protocol will
    use the BIND request only to establish secondary connections after a
    primary connection is established using CONNECT

    意思是,我们认为Client使用BIND命令的原因只有一个,那就是在使用CONNECT命令建立了第一个连接之后,需要建立第二个连接,就像FTP服务,第一个connection用于命令交互,第二个connection用于传输数据,这时SERVER使用DST.ADDR字段和DST.PORT字段来进行请求的审核

    socks服务器作为一个中间人

    一头连接Client,这时Server会创建和绑定一个新的socket,并向Client发送第一个响应

    另一头连接Client让它去连接的ADDRPORT,当另一头的连接建立成功后,第二个响应会被发送给Client

    UDP ASSOCIATE

    UDP ASSOCIATE命令通常是要求建立一个UDP中继来处理到来的UDP数据包,数据包中的DST.ADDRDST.PORT字段包含了Client希望用来发送UDP报文的地址和端口号,这样一来,Server就能通过ADDRPORT来限制连接(相对于Server的另一端,就是Client委托Server访问的那一端,不是来自指定地址和端口的报文将不被转发),如果主机没有指定这两个字段的值,将会被填充为0

    TCP连接中断的时候,UDP association也会中断,因为它本来就是建立在ClientServerTCP连接之上的

    响应过程

    X'00'之外的所有响应码都表明了请求失败,发送完响应报文之后Server会中断连接,This must be no more than 10 seconds after detecting the
    condition that caused a failure

    如果响应报文的REP字段为X'00',则开始转发报文

    UDP服务的处理过程

    意思就是Client希望Server能帮自己去和远程服务器进行UDP连接

    Each UDP datagram carries a UDP request
    header with it**(首部格式)**:

    +----+------+------+----------+----------+----------+
    |RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |
    +----+------+------+----------+----------+----------+
    | 2  |  1   |  1   | Variable |    2     | Variable |
    +----+------+------+----------+----------+----------+
    
    • RSV
      • Reserved X’0000’
    •        **FRAG**    
      
      • X’00’表示没有其余分片,1-127表示它在所有分片中的编号
    •        **ATYP**    **(address type of following addresses)**
      
      •           IP V4 address: X'01'
        
      •           DOMAINNAME: X'03'
        
      •           IP V6 address: X'04'
        
    •        **DST.ADDR**       
      
      • Client委托Server转发的报文的目的地址
    •        **DST.PORT**
      
      • Client委托Server转发的报文的目的端口
    •        **DATA**
      
      •             user data
        

    远程UDP服务器需要从SOCKS服务器获得ClientIP,来自其他IP的报文将会被丢弃

    每个Client都有一个组装队列,用于组装被分片的UDP报文,同时拥有一个超时定时器,组装工作需要在此时间内完成,否则重装队列会被初始化分片将会被丢弃,or when a new datagram arrives carrying a FRAG field whose value is less
    than the highest FRAG value processed for this fragment sequence
    .

    The reassembly timer MUST be no less than 5 seconds. It is
    recommended that fragmentation be avoided by applications wherever
    possible.

    展开全文
  • socks v5

    2014-10-31 14:26:59
    5.地址 6.应答 7.基于UDP协议的客户 8. 安全性考虑 9. 参考书目 1.介绍 利用网络防火墙可以将组织内部的网络结构从外部网络如INTERNET中有效地隔离,这种方法在许多网络系统中正变得流行起来。...

    目录

    1.介绍

    2.现有的协议

    3.基于TCP协议的客户

    4.请求

    5.地址

    6.应答

    7.基于UDP协议的客户

    8. 安全性考虑

    9. 参考书目

    1.介绍

    利用网络防火墙可以将组织内部的网络结构从外部网络如INTERNET中有效地隔离,这种方法在许多网络系统中正变得流行起来。这种防火墙系统通常以应用层网关的形式工作在两个网络之间,提供TELNET、FTP、SMTP等的接入。随着越来越多的使全球信息查找更容易的复杂的应用层协议的出现,有必要提供一个通用框架来使这些协议安全透明地穿过防火墙。而且在实际应用中还需要一种安全的认证方式用以穿越防火墙。这个要求起源于两个组织的网络中客户/服务器关系的出现,这个关系需要得到控制并要求有安全的认证。

    在这儿所描述的协议框架是为了让使用TCP和UDP的客户/服务器应用程序更方便安全地使用网络防火墙所提供的服务所设计的。这个协议从概念上来讲是介于应用层和传输层之间的“中介层(shim-layer)”,因而不提供如传递ICMP信息之类由网络层网关的所提供的服务。

    2.现有的协议

    当前存在一个协议SOCKS 4,它为TELNET、FTP、HTTP、WAIS和GOPHER等基于TCP协议的客户/服务器程序提供了一个不安全的防火墙。而这个新的协议扩展了SOCKS V4,以使其支持UDP、框架规定的安全认证方案、地址解析方案(addressing scheme)中所规定的域名和IPV6。为了实现这个SOCKS协议,通常需要重新编译或者重新链接基于TCP的客户端应用程序以使用SOCKS库中相应的加密函数。

    注意:

    除非特别注明,所有出现在数据包格式图中的十进制数字均以字节表示相应域的长度。如果某域需要给定一个字节的值,用X’hh’来表示这个字节中的值。如果某域中用到单词’Variable’,这表示该域的长度是可变的,且该长度定义在一个和这个域相关联(1 – 2个字节)的域中,或一个数据类型域中。

    3.基于TCP协议的客户

    当一个基于TCP协议的客户端希望与一个只能通过防火可以到达的目标(这是由实现所决定的)建立连接,它必须先建立一个与SOCKS服务器上SOCKS端口的TCP连接。通常这个TCP端口是1080。当连接建立后,客户端进入协议的“握手(negotiation)”过程:认证方式的选择,根据选中的方式进行认证,然后发送转发的要求。SOCKS服务器检查这个要求,根据结果,或建立合适的连接,或拒绝。

    除非特别注明,所有出现在数据包格式图中的十进制数字均以字节表示相应域的长度。如果某域需要给定一个字节的值,用X’hh’来表示这个字节中的值。如果某域中用到单词’Variable’,这表示该域的长度是可变的,且该长度定义在一个和这个域相关联(1 – 2个字节)的域中,或一个数据类型域中。

    客户端连到服务器后,然后就发送请求来协商版本和认证方法:

    VER NMETHODS METHODS
    1 1 1 to 255

    这个版本的SOCKS协议中,VER字段被设置成X'05'。NMETHODS字段包含了在METHODS字段中出现的方法标示的数目(以字节为单位)。

    服务器从这些给定的方法中选择一个并发送一个方法选中的消息回客户端:

    VER METHOD
    1 1

    如果选中的消息是X’FF’,这表示客户端所列出的方法列表中没有一个方法被选中,客户端必须关闭连接。

    当前定义的方法有:

    · X’00’ 不需要认证

    · X’01’ GSSAPI

    · X’02’ 用户名/密码

    · X’03’ -- X’7F’ 由IANA分配

    · X’80’ -- X’FE’ 为私人方法所保留的

    · X’FF’ 没有可以接受的方法

    然后客户和服务器进入由选定认证方法所决定的子协商过程(sub-negotiation)。各种不同的方法的子协商过程的描述请参考各自的备忘录。

    开发者如果要为自己的方法得到一个方法号,可以联系IANA。可以参考关于已经被分配号码的文档以得到当前所有方法的列表和相应的协议。

    符合本文档的SOCKS V5实现必须支持GSSAPI,并且在将来支持用户名/密码认证方式。

    4.请求

    一旦子协商过程结束后,客户端就发送详细的请求信息。如果协商的方法中有以完整性检查和/或安全性为目的的封装,这些请求必须按照该方法所定义的方式进行封装。

    SOCKS请求的格式如下:

    VER CMD RSV ATYP DST.ADDR DST.PROT
    1 1 X’00’ 1 Variable 2

    其中

    · VER 协议版本: X’05’

    · CMD

    · CONNECT:X’01’

    · BIND:X’02’

    · UDP ASSOCIATE:X’03’

    · RSV 保留

    · ATYP 后面的地址类型

    · IPV4:X’01’

    · 域名:X’03’

    · IPV6:X’04’'

    · DST.ADDR 目的地址

    · DST.PORT 以网络字节顺序出现的端口号

    SOCKS服务器会根据源地址和目的地址来分析请求,然后根据请求类型返回一个或多个应答。

    5.地址

    ATYP字段中描述了地址字段(DST.ADDR,BND.ADDR)所包含的地址类型:

    · X'01'

    基于IPV4的IP地址,4个字节长

    · X'03'

    基于域名的地址,地址字段中的第一字节是以字节为单位的该域名的长度,没有结尾的NUL字节。

    · X'04'

    基于IPV6的IP地址,16个字节长

    6.应答

    一旦建立了一个到SOCKS服务器的连接,并且完成了认证方式的协商过程,客户机将会发送一个SOCKS请求信息给服务器。服务器将会根据请求,以如下格式返回:

    VER REP RSV ATYP BND.ADDR BND.PORT
    1 1 X’00’ 1 Variable 2

    其中:

    · VER 协议版本: X’05’

    · REP 应答字段:

    · X’00’ 成功

    · X’01’ 普通的SOCKS服务器请求失败

    · X’02’ 现有的规则不允许的连接

    · X’03’ 网络不可达

    · X’04’ 主机不可达

    · X’05’ 连接被拒

    · X’06’ TTL超时

    · X’07’ 不支持的命令

    · X’08’ 不支持的地址类型

    · X’09’ – X’FF’ 未定义

    · RSV 保留

    · ATYP 后面的地址类型

    · IPV4:X’01’

    · 域名:X’03’

    · IPV6:X’04’

    · BND.ADDR 服务器绑定的地址

    · BND.PORT 以网络字节顺序表示的服务器绑定的段口

    标识为RSV的字段必须设为X’00’。

    如果选中的方法中有以完整性检查和/或安全性为目的的封装,这些应答必须按照该方法所定义的方式进行封装。

    CONNECT

    在对一个CONNECT命令的应答中,BND.PORT包含了服务器分配的用来连到目标机的端口号,BND.ADDR则是相应的IP地址。由于SOCKS服务器通常有多个IP,应答中的BND.ADDR常和客户端连到SOCKS服务器的那个IP不同。

    SOCKS服务器可以利用DST.ADDR和DST.PORT,以及客户端源地址和端口来对一个CONNECT请求进行分析。

    BIND

    BIND请求通常被用在那些要求客户端接受来自服务器的连接的协议上。FTP是一个典型的例子。它建立一个从客户端到服务器端的连接来执行命令以及接收状态的报告,而使用另一个从服务器到客户端的连接来接收传输数据的要求(如LS,GET,PUT)。
    建议只有在一个应用协议的客户端在使用CONNECT命令建立主连接后才可以使用BIND命令建立第二个连接。建议SOCKS服务器使用DST.ADDR和DST.PORT来评价BIND请求。

    在一个BIND请求的操作过程中,SOCKS服务器要发送两个应答给客户端。当服务器建立并绑定一个新的套接口时发送第一个应答。BND.PORT字段包含SOCKS服务器用来监听进入的连接的端口号,BAND.ADDR字段包含了对应的IP地址。客户端通常使用这些信息来告诉(通过主连接或控制连接)应用服务器连接的汇接点。第二个应答仅发生在所期望到来的连接成功或失败之后。在第二个应答中,BND.PORT和BND.ADDR字段包含了连上来的主机的IP地址和端口号。

    UDP ASSOCIATE

    UDP ASSOCIATE请求通常是要求建立一个UDP转发进程来控制到来的UDP数据报。DST.ADDR和DST.PORT 字段包含客户端所希望的用来发送UDP数据报的IP地址和端口号。服务器可以使用这个信息来限制进入的连接。如果客户端在发送这个请求时没有地址和端口信息,客户端必须用全0来填充。

    当与UDP相应的TCP连接中断时,该UDP连接也必须中断。

    应答UDP ASSOCIATE请求时,BND.PORT 和BND.ADDR字段指明了客户发送UDP消息至服务器的端口和地址。

    应答处理

    当一个应答(REP值不等于00)指明出错时,SOCKS服务器必须在发送完应答消息后一小段时间内终止TCP连接。这段时间应该在发现错误后少于10秒。

    如果一个应答(REP值等于00)指明成功,并且请求是一个BIND或CONNECT时,客户端就可以开始发送数据了。如果协商的认证方法中有以完整性、认证和/或安全性为目的的封装,这些请求必须按照该方法所定义的方式进行封装。类似的,当以客户机为目的地的数据到达SOCKS服务器时,SOCKS服务器必须用正在使用的方法对这些数据进行封装。

    7.基于UDP协议的客户

    在UDP ASSOCIATE应答中由BND.PORT指明了服务器所使用的UDP端口,一个基于UDP协议的客户必须发送数据报至UDP转发服务器的该端口上。如果协商的认证方法中有以完整性、认证和/或安全性为目的的封装,这些数据报必须按照该方法所定义的方式进行封装。每个UDP数据报都有一个UDP请求头在其首部:

    RSV FRAG ATYP DST.ADDR DST.PORT DATA
    2 1 1 Variable 2 Variable

    在UDP请求头中的字段是:

    · RSV 保留 X’0000’

    · FRAG 当前的分段号

    · ATYP 后面的地址类型

    · IPV4:X’01’

    · 域名:X’03’

    · IPV6:X’04’

    · DST.ADDR 目的地址

    · DST.PORT 以网络字节顺序出现的端口号

    · DATA 用户数据

    当一个UDP转发服务器转发一个UDP数据报时,不会发送任何通知给客户端;同样,它也将丢弃任何它不能发至远端主机的数据报。当UDP转发服务器从远端服务器收到一个应答的数据报时,必须加上上述UDP请求头,并对数据报进行封装。

    UDP转发服务器必须从SOCKS服务器得到期望的客户端IP地址,并将数据报发送到UDP ASSOCIATE应答中给定的端口号。如果数据报从任何IP地址到来,而该IP地址与该特定连接中指定的IP地址不同,那么该数据报会被丢弃。

    FRAG字段指明数据报是否是一些分片中的一片。如果SOCKS服务器要实现这个功能,X’00’指明数据报是独立的;其他则越大越是数据报的尾端。介于1到127之间的值说明了该分片在分片序列里的位置。每个接收者都为这些分片提供一个重组队列和一个重组的计时器。这个重组队列必须在重组计时器超时后重新初始化,并丢弃相应的数据报。或者当一个新到达的数据报有一个比当前在处理的数据报序列中最大的FRAG值要小时,也必须重新初始化从组队列。重组计时器必须小于5秒。只要有可能,应用程序最好不要使用分片。

    分片的实现是可选的;如果某实现不支持分片,所有FRAG字段不为0的数据报都必须被丢弃。

    一个SOCKS的UDP编程界面(The programming interface for a SOCKS-aware UDP)必须报告当前可用UDP数据报缓存空间小于操作系统提供的实际空间。

    · 如果 ATYP是 X’01’ - 10+method_dependent octets smaller

    · 如果 ATYP是X’03’ - 262+method_dependent octets smaller

    · 如果 ATYP是X’04’ - 20+method_dependent octets smaller

    8. 安全性考虑

    这篇文档描述了一个用来透过IP网络防火墙的应用层协议。这种传输的安全性在很大程度上依赖于特定实现所拥有以及在SOCKS客户与SOCKS服务器之间经协商所选定的特殊的认证和封装方式。

    系统管理员需要对用户认证方式的选择进行仔细考虑。






    一个高手的介绍:

    1. http://wenku.baidu.com/link?url=HCkxW8I34pyfoq9AZA7Y3wPLD5zthQa9zndZI2XF9dGGzhVXH6FcBrR7DYrdlMY-1U7W0fS98yivBq1dKOiVqAlUVfE9RBg3U8It5tWZxWa

    2. http://gc063tzf.blog.163.com/blog/static/11216292201210246448371/

    展开全文
  • <div><p>In the proxy string, socks5h:// and socks4a:// ... socks5:// and socks4:// mean the hostname is to be resolved locally. <p>Fix #1035</p><p>该提问来源于开源项目:urllib3/urllib3</p></div>
  • nim-socks5:Nim Socks5
  • Socks5代理Socks5 Proxy

    千次阅读 2017-03-13 13:56:12
    Socks5代理Socks5 Proxy
  • Socks5 Proxy Netty实现 简单,只关注正常流程 抛弃非功能性的代码(错误,特殊情况处理)
  • Socks5配置器 使用socks5代理配置Chrome 安装 作者 一个项目 执照 根据MIT许可获得许可
  • 提供实现的socks5软件包。 SOCKS(安全套接字)用于通过中间代理层在客户端和服务器之间路由流量。 这可用于绕过防火墙或NAT。 特征 该软件包具有以下功能: “无身份验证”模式 用户/密码认证 支持CONNECT命令 ...
  • aysncio-socks5 只是一个socks5服务器 支持用户名/密码认证 支持命令CONNECT 去做 支持命令 BIND、UDP ASSOCIATE 优化 IPv4 和 IPv6 之间的逻辑
  • SOCKS5连接示例 SOCKS5代理服务器的连接示例。 如有疑问: : 编译... 视窗... gcc.exe socks5.c -o socks -lws2_32 -std=c99 Linux ... gcc socks5.c -o socks5 -std=c99
  • 袜子服务器 (套接字安全)代理服务器。 支持SOCKS4 支持SOCKS5 身份验证尚未实现 执照 版权所有2015 Christopher Brown。 。
  • 袜子 socks5代理实验 另一个影s
  • socks5 这是一个新的、使用netty实现的、使用http协议进行混淆的socks5代理。解决了前作项目因go内存回收机制/内存复用机制弱带来的cpu/内存占用高的问题。 电报讨论组 电报讨论组 项目简介 项目地址: 该socks5代理...
  • multiplexing_port_socks5 一款golang写的支持http与socks5的端口替换小工具,并且可以打开socks5代理。 支持端口兼容的小工具。目前仅支持ocks5。与http分流。(linux版可自行添加修改。模块已经写好) 相关项目 ...
  • socks5.tar

    2020-11-29 09:36:58
    socks5服务器源代码 基于linux c epoll实现 搭建与云服务器 火狐浏览器测试 运行./ss即可 火狐设置socks5代理 你的服务器IP:1200
  • socks5-go :party_popper: 受go-socks5启发,此软件包提供了全部功能。 此处描述的协议旨在为TCP和UDP域中的客户端-服务器应用程序提供一个框架,以方便安全地使用网络防火墙的服务。 好处 :thumbs_up: 轻松的...
  • C# socks5服务端

    2021-04-08 13:35:51
    C# socks5服务端,终端程序源码。编译仅仅12K
  • rem:socks5代理服务器,可以自动切换直接或socks5父代理
  • SOCKS5 support

    2021-01-07 18:27:03
    <div><p>I have tried using qbittorrent or deluge with a SOCKS5 server that is set up to support UDP. Both are setup to use the SOCKS5 for all types of connections, but on both DHT does not work and ...
  • socks5 proxy

    2020-12-06 16:12:15
    could you please explain how to use pyrogram with socks5 proxy? tried <a href="https://github.com/Anorov/PySocks">PySocks</a> but no luck unfortunately. add <code>socks.set_default_proxy(socks.SOCKS5...
  • socks5 tests

    2020-12-26 07:14:47
    <div><p>Some small changes were made to <code>socks5.c</code> to allow for easier testing and to avoid doing any IO during the unit tests. This seemed like the best option, as setting up a dummy ...
  • 描述 使用Scala和Netty轻松实现socks5代理协议。 完全使用异步Java NIO来扩展许多并发连接。 打算与docker一起部署在私有vps上以进行快速设置。 Docker Hub: :
  • use async_socks5 :: {connect, Result }; #[tokio::main] async fn main () -> Result <()> { let stream = TcpStream :: connect ( "my-proxy-server.com:54321" ). await ?; let mut stream = BufStream :: ...
  • minimalistic SOCKS5

    2020-12-01 21:15:57
    password) plugin to run in the minimalistic SOCKS5 version? I would just need to have an auth feature using the minimalistic version. Another interesting point would be to set the ipadress just to ...
  • socks5服务器 原始但现代。 通过config(/etc/go-socks5-server.config.json)进行授权,而不是通过Linux PAM进行授权。 在Go上编写的Socks5代理服务器(基于: : ) 如何安装 CentOS6(已测试)或其他sysvinit...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,263
精华内容 1,705
关键字:

socks5