`
liujianguangaaa
  • 浏览: 239199 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

SOCKS 4协议中文文档意译版

 
阅读更多

SOCKS协议最初由David Koblas设计,后经Ying-Da Lee改进成SOCKS 4协议。

SOCKS4协议主要是如下几个RFC
http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol
http://www.rfc-editor.org/rfc/rfc1928.txt
http://www.smartftp.com/Products/SmartFTP/RFC/socks4a.protocol



SOCKS 4只支持TCP转发。

请求报文格式如下:

+----+----+----+----+----+----+----+----+----+----+...+----+
| VN | CD | DSTPORT |      DSTIP        | USERID      |NULL|
+----+----+----+----+----+----+----+----+----+----+...+----+
   1    1      2              4           variable       1

VN      SOCKS协议版本号,应该是0x04

CD      SOCKS命令,可取如下值:

        0x01    CONNECT
        0x02    BIND

DSTPORT CD相关的端口信息

DSTIP   CD相关的地址信息

USERID  客户方的USERID

NULL    0x00

响应报文格式如下:

+----+----+----+----+----+----+----+----+
| VN | CD | DSTPORT |      DSTIP        |
+----+----+----+----+----+----+----+----+
   1    1      2              4

VN      应该为0x00而不是0x04

CD      可取如下值:

        0x5A    允许转发
        0x5B    拒绝转发,一般性失败
        0x5C    拒绝转发,SOCKS 4 Server无法连接到SOCS 4 Client所在主机的
                IDENT服务
        0x5D    拒绝转发,请求报文中的USERID与IDENT服务返回值不相符

DSTPORT CD相关的端口信息

DSTIP   CD相关的地址信息

1) CONNECT命令

对于CONNECT请求,DSTIP/DSTPORT指明转发目的地。

SOCKS 4 Server根据源IP、DSTPORT、DSTIP、USERID以及可从SOCS 4 Client所在主
机的IDENT服务(RFC 1413)获取的信息进行综合评估,以决定建立相应连接还是拒绝
转发。

假设CONNECT请求被允许,SOCKS 4 Server试图建立到转发目的地的TCP连接,然后向
SOCKS 4 Client发送响应报文,指明是否成功建立转发连接。

如果CONNECT请求被拒绝,SOCKS 4 Server也向SOCKS 4 Client发送响应报文,随后
立即关闭连接。

CONNECT响应包中只有VN、CD字段有意义,DSTPORT、DSTIP字段被忽略。如果CD等于
0x5A,表示成功建立转发连接,之后SOCKS 4 Client直接在当前TCP连接上发送待转
发数据。

2) BIND命令

FTP协议在某些情况下要求FTP Server主动建立到FTP Client的连接,即FTP数据流。

FTP Client - SOCKS 4 Client - SOCKS 4 Server - FTP Server

a. FTP Client试图建立FTP控制流。SOCKS 4 Client向SOCKS 4 Server发送CONNECT
   请求,后者响应请求,最终FTP控制流建立。

   CONNECT请求包中指明FTPSERVER.ADDR/FTPSERVER.PORT。

b. FTP Client试图建立FTP数据流。SOCKS 4 Client建立新的到SOCKS 4 Server的
   TCP连接,并在新的TCP连接上发送BIND请求。

   BIND请求包中仍然指明FTPSERVER.ADDR/FTPSERVER.PORT。

   SOCKS 4 Server收到BIND请求,根据这两个信息以及USERID对BIND请求进行评估。
   创建新套接字,侦听在AddrA/PortA上,并向SOCKS 4 Client发送第一个BIND响应
   包。

   BIND响应包中CD不等于0x5A时表示失败,包中DSTPORT、DSTIP字段被忽略。

   BIND响应包中CD等于0x5A时,包中DSTIP/DSTPORT对应AddrA/PortA。如果DSTIP等
   于0(INADDR_ANY),SOCKS 4 Client应将其替换成SOCKS 4 Server的IP,当SOCKS
   4 Server非多目(multi-homed)主机时就可能出现这种情况。

c. SOCKS 4 Client收到第一个BIND响应包。

   FTP Client调用getsockname(不是getpeername)获取AddrA/PortA,通过FTP控制
   流向FTP Server发送PORT命令,通知FTP Server应该主动建立到AddrA/PortA的
   TCP连接。

d. FTP Server收到PORT命令,主动建立到AddrA/PortA的TCP连接,假设TCP连接相关
   四元组是:

   AddrB,PortB,AddrA,PortA

e. SOCKS 4 Server收到来自FTP Server的TCP连接请求,检查这条入连接的源IP(
   AddrB)是否与FTPSERVER.ADDR匹配,然后向SOCKS 4 Client发送第二个BIND响应
   包。

   源IP不匹配时第二个BIND响应包中CD字段设为0x5B,然后SOCKS 4 Server关闭这
   条用于发送第二个BIND响应包的TCP连接,同时关闭与FTP Server之间的TCP连接,
   但主TCP连接(与CONNECT请求相关的那条TCP连接)继续保持中。

   源IP匹配时CD字段设为0x5A。然后SOCKS 4 Server开始转发FTP数据流。

   无论如何,第二个BIND响应包中DSTPORT、DSTIP字段被忽略。

对于CONNECT、BIND请求,SOCKS 4 Server有一个定时器(当前CSTC实现采用两分钟)。
假设定时器超时,而SOCKS 4 Server与Application Server之间的TCP连接(出连接或
入连接)仍未建立,SOCKS 4 Server将关闭与SOCKS 4 Client之间相应的TCP连接并放
弃相应的转发。

分享到:
评论

相关推荐

    rfc1928:SOCKS V5中文版

    本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建议以得到改进。请参考最新版的 “Internet正式协议标准” (STD1)来获得本协议的标准化程度和状态。本备忘录的发布不受任何限制。 ...

    netty-codec-socks-4.1.68.Final-API文档-中文版.zip

    包含翻译后的API文档:netty-codec-socks-4.1.68.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.netty:netty-codec-socks:4.1.68.Final; 标签:netty、codec、socks、中文文档、jar包、java; 使用方法...

    netty-codec-socks-4.1.73.Final-API文档-中文版.zip

    包含翻译后的API文档:netty-codec-socks-4.1.73.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.netty:netty-codec-socks:4.1.73.Final; 标签:codec、socks、netty、jar包、java、中文文档; 使用方法...

    SOCKS 5协议详解

    在实际学习中,由于在有些软件用到了socks5(如oicq,icq等),对其原理不甚了解,相信很多朋友对其也不是很了解,于是我仔细研读了一下rfc1928,觉得有必要译出来供大家参考。

    代理IP检测工具,HTTP/HTTPS/SOCKS5协议连通率和延迟检测

    在IT行业中,网络协议是构建互联网通信的基础,而代理IP则是网络访问的一种策略。本文将深入探讨代理IP检测工具,特别是针对HTTP、HTTPS以及SOCKS5协议的连通率和延迟检测,这对于网络爬虫、数据抓取、网络安全以及...

    Socks Proxy 源代码

    Socks Proxy协议分为多个版本,主要为Socks4、Socks4a和Socks5。Socks4是最基础的版本,仅支持TCP连接,不处理域名解析,需要客户端提前完成。Socks4a在此基础上增加了对域名解析的支持,允许代理服务器协助完成。而...

    netty-codec-socks-4.1.74.Final-API文档-中文版.zip

    包含翻译后的API文档:netty-codec-socks-4.1.74.Final-javadoc-API文档-中文(简体)版.zip; Maven坐标:io.netty:netty-codec-socks:4.1.74.Final; 标签:netty、codec、socks、中文文档、jar包、java; 使用方法...

    netty-codec-socks-4.1.73.Final-API文档-中英对照版.zip

    包含翻译后的API文档:netty-codec-socks-4.1.73.Final-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.netty:netty-codec-socks:4.1.73.Final; 标签:codec、socks、netty、jar包、java、中英对照...

    SocksOnline64位

    SOCKS协议主要有两种版本:SOCKS4和SOCKS5。SocksOnline64位可能支持其中的SOCKS5,因为它是更为先进和安全的版本,提供了身份验证机制,并且可以处理TCP以及UDP等多种协议。SOCKS5还允许进行IPv6连接,而SOCKS4则仅...

    Socks5_openlx9_socks5_C#soks5_socks5分享_.net_

    SOCKS5是一种网络协议,它允许客户端通过代理服务器与任意TCP或UDP服务进行通信。在C#中实现SOCKS5代理服务器是一项技术挑战,但也是一个强大的工具,特别是对于需要处理网络请求、数据转发或者匿名浏览的应用。本文...

    netty-codec-socks-4.1.74.Final-API文档-中英对照版.zip

    包含翻译后的API文档:netty-codec-socks-4.1.74.Final-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:io.netty:netty-codec-socks:4.1.74.Final; 标签:netty、codec、socks、中英对照文档、jar包、...

    Socks5.rar_socks5_socks5编程

    在互联网通信领域,Socks5协议是一种广泛使用的代理协议,它允许客户端通过一个中间服务器(即Socks5服务器)与目标服务器进行通信,提供了网络透明性,使用户可以绕过特定的网络限制。本文将深入探讨Socks5协议的...

    Socks5.rar_VC Sock_dl socks 5 for vc _socks5_socks5 for vc_vc so

    4. **TCP连接和UDP数据报**:Socks5协议支持两种传输层协议,开发者需要理解这两种协议的工作机制并实现它们。 5. **网络编程**:包括套接字创建、绑定、监听、连接、发送和接收数据等操作。 6. **错误处理**:在...

    socks5-v1.0r11.rar

    【袜子协议(Socks5)详解】 Socks5是一种网络通信协议,全称为“SOCKet Secure Version 5”,它允许应用程序通过代理服务器与Internet上的任意其他服务器进行通信。Socks5协议提供了通用的网络代理服务,适用于TCP...

    基于Netty框架的Socks5代理服务器.zip

    本项目是一个基于Netty框架实现的Socks5代理服务器,支持Socks5协议的代理功能。项目包含了多个模块,涵盖了从客户端连接处理到服务器端代理转发的完整流程。主要功能包括 处理客户端的Socks5协议请求。 建立与...

    socks4a:一个使用golang实现socks4a服务器的例子

    它扩展了原始的SOCKS4协议,增加了对非标准DNS解析的支持,允许客户端通过服务器连接到任意的IP地址,包括那些不在服务器本地DNS解析范围内的地址。这使得SOCKS4a在代理服务器应用中更加灵活,可以用于绕过某些网络...

    易语言实现超级代理服务端源码,支持http+socks4+socks5.zip

    易语言实现超级代理服务端源码,支持http+socks4+socks5.zip

    自己改的Socks4代理代码,稳定能用

    自己改编的Socks4代理源代码,稳定能用。没有写成服务形式,有此需要的朋友自己改一下就可以了

Global site tag (gtag.js) - Google Analytics