-
在线客服
工作日:9:00-24:00
-
商务合作
15366085265
-
QQ联系方式
1872421339
-
大客户经理
宋经理
SOCKS5 是一种通用、透明、底层的代理协议,与 HTTP 代理不同,SOCKS5 不解析上层协议内容,而是直接中继 TCP 与 UDP 数据。
它可以代理:浏览器、游戏、数据库、SSH、QUIC、DNS 等几乎所有应用协议,因此成为现代代理系统的基础组件。
完整的 SOCKS5 流程包括以下四个阶段:
1. 握手(Hello) —— 客户端告知支持的认证方式
2. 认证 —— 服务器选择并执行认证(如用户名密码)
3. 请求阶段 —— 指明目标地址与端口,CONNECT/UDP
4. 数据转发 —— TCP/UDP 中继正式建立
客户端首先发起 Hello,告诉服务器自己支持哪些认证方式。
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1~255 |
示例:客户端支持“无认证”和“用户名密码”。
05 02 00 02
服务器响应:
+----+--------+
|VER | METHOD |
+----+--------+
05 00 (表示选择无认证)
若服务器选择 METHOD = 0x02(用户名密码),客户端需发送:
+----+------+----------+------+----------+
|VER | ULEN | UNAME | PLEN | PASSWD |
+----+------+----------+------+----------+
示例:用户名 test、密码 passwo
01 04 74657374 06 70617373776f
服务器返回认证结果:
+----+--------+
|VER | STATUS |
+----+--------+
STATUS = 0 表示认证成功。
客户端在认证通过后发送代理请求,格式如下:
+----+-----+-------+------+----------+----------+
|VER | CMD | RSV | ATYP | DST.ADDR | DST.PORT |
+----+-----+-------+------+----------+----------+
字段意义:
VER = 0x05(版本号)
CMD = 01 CONNECT,03 UDP
ATYP = 01 IPv4,03 域名,04 IPv6
示例:通过域名连接到 www.google.com:443
05 01 00 03 0E 7777772E676F6F676C652E636F6D 01BB
服务器响应连接建立结果:
+----+-----+-------+------+----------+----------+
|VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
+----+-----+-------+------+----------+----------+
REP = 00 表示成功。
客户端与目标服务器之间的所有 TCP 数据由代理服务器中继,代理不关心具体内容,透明转发。
客户端 <==TCP==> 代理服务器 <==TCP==> 目标服务器
当 CMD=03 时,客户端请求建立 UDP 转发通道。代理服务器会返回:UDP 中继地址 & 端口。
客户端发送的 UDP 包必须加 SOCKS5 UDP Header:
+----+------+------+----------+----------+----------+
|RSV | FRAG | ATYP | DST.ADDR | DST.PORT | DATA |
+----+------+------+----------+----------+----------+
DATA 是原始 UDP 负载。代理服务器解析头部后再转发给目标服务器。
客户端 代理服务器
--------------------------------------------------------------
Hello → VER=05, METHODS=[00,02]
← Select Method METHOD=00 (No Auth)
CONNECT 请求 → CMD=01, DST.ADDR, DST.PORT
← 连接建立成功 REP=00
TCP 数据包双向转发 ↔ 原样透传,不修改上层协议
--------------------------------------------------------------
客户端 代理服务器
--------------------------------------------------------------
Hello →
← Select Method
UDP Associate → CMD=03
← UDP Relay 信息
UDP 数据(封装) → SOCKS5 UDP Header + DATA
← 封装后的返回包
--------------------------------------------------------------
1)多数 SOCKS5 代理并不支持 UDP(或实现不完整)
—— 导致 QUIC、DNS、游戏协议无法通过
2)浏览器启用 SOCKS5 后会默认禁用 QUIC(HTTP/3 自动降级为 HTTP/2)
3)UDP ASSOCIATE 不等于“直接发 UDP 就行”
—— 必须添加 SOCKS5 UDP Header
4)SOCKS5 本身不加密 —— 数据在网络中是明文
—— 因此很多代理系统会在外层加入 TLS 或自定义加密
原因包括:
· 协议简单、透明
· 支持 TCP/UDP
· 支持多认证方式
· 支持 IPv4/IPv6/域名
· 适配通用性极强
SOCKS5 是现代代理技术的基石之一,无论是浏览器代理、游戏代理还是企业网络流量中继,它都有不可替代的作用。