标签:端口 认证 proxy nbsp work tar 流程 ane nal
SOCKS5 是一个代理协议,旨在为位于 Intranet 防火墙后的用户提供访问 Internet 的代理服务(Intranet,你没听错,这是个有一定年头的协议,其 RFC 提案的时间比 HTTP 1.0 还要早两个月)。
根据 HTTP 1.1 的定义,proxy 是:
An intermediary program which acts as both a server and a client for the purpose of making requests on behalf of other clients. Requests are serviced internally or by passing them on, with possible translation, to other servers.
代理就是中间人,一人分饰两角:客户端眼中的目标服务器,目标服务器眼中的客户端——这意味着他必须同时满足C/S 双方的规范。
再细分,如果只是简单的 pipe C/S 两端数据,那他就是个“透明代理”;一旦他对请求或响应进行了修改,那就是“非透明代理”。
但其实,SOCKS5 协议并不负责代理服务器的数据传输环节,此协议只是在C/S两端真实交互之间,建立起一条从客户端到代理服务器的授信连接。
从流程上来说,SOCKS5 是一个C/S 交互的协议,交互大概分为这么几步:
认证方法:
版本号(1字节) | 可供选认证方法(1字节) | 选择的方法(1~255字节) |
固定为5 | 选了多少种 | 都有上表中哪些方法 |
版本号(1字节) | 确认认证的方法 |
固定为5 | 认证方法列表的某项: 0x00,则无需客户端发送进一步认证的信息 0x01,则需要客户端进行进一步认证,细节见 RFC1929 0x01,则需要客户端进行进一步认证,细节见RFC2743 0xFF,则相当于拒绝请求,客户端只能关闭连接 |
版本号(1字节) | 命令(1字节) | 保留(1字节) | 请求类型(1字节) | 地址(不定长) | 端口(2字节) |
固定为5 | 0x01: CONNECT 0x02: BIND 0x03: UDP ASSOCIATE |
固定为 0x00 | 0x01: IP V4 地址 0x03: 域名 0x04: IP V6 地址 |
如果请求 类型是域名, 第个1字节为 域名的长度 |
命令字段说明:
版本号(1字节) | 确认回应(1字节) | 保留(1字节) | 响应类型(1字节) | 地址(不定长) | 端口(2字节) |
固定为5 | 0x00: succeeded 0x01: general SOCKS server failure 0x02: connection not allowed by ruleset 0x03: Network unreachable 0x04: Host unreachable 0x05: Connection refused 0x06: TTL expired 0x07: Command not supported 0x08: Address type not supported 0x09: to X’FF’ unassigned |
固定为 0x00 | 仅用于响应客 户端BIND命令: 0x01: IP V4 地址 0x03: 域名 0x04: IP V6 地址 |
仅用于响应客 户端BIND命令: 如果请求 类型是域名, 第个1字节为 域名的长度 |
仅用于响应客 户端BIND命令 |
可以看出,在代理服务器确认回应为 0x00 时,此次 SOCKS5 协议协商部分顺利完成,宣告进入到数据传输阶段(也可以说,这之后发生的事已经与SOCKS5协议无关)。
出处:
标签:端口 认证 proxy nbsp work tar 流程 ane nal
原文地址:http://www.cnblogs.com/yuyutianxia/p/7502857.html