御风IP

SK5(SOCKS5) 代理检测:三步握手走通才算可用

SK5 就是 SOCKS5,业界口语里常写成 SK5。它的检测比 L2TP 简单,但"端口能连上"和"代理真能用"之间的距离,同样容易踩坑。

一、SOCKS5 的完整握手过程

一次可用的 SOCKS5 代理,客户端要完成三段交互,任何一段失败都等于不可用。

阶段客户端发出服务端应返回
1. 方法协商版本号 0x05 + 支持的认证方法列表选定一种方法,常用 0x00(免认证)或 0x02(用户名密码)
2. 认证(RFC1929)版本 0x01 + 用户名长度与内容 + 密码长度与内容0x01 表示认证成功,非 0 状态码即失败
3. 建立连接0x05 + CONNECT 命令 + 目标地址与端口应答码 0x00 表示成功,其余为各类拒绝原因
只有第三段返回成功应答,代理才算真正可用。前两段通过、第三段被拒,是最常见的"看着能用实际不能用"。

二、四种典型失败与对应原因

1. 端口能连,但一说话就断

多半是端口不是 SOCKS5 服务。服务商面板里那一列数字有时是 HTTP 代理端口、有时是账号字段、有时只是内部编号。可以观察返回的首字节:SOCKS5 一定会回 0x05 开头的响应,回了 HTTP 的 200 或直接断开就不是 SOCKS5。

2. 卡在方法协商,服务端不选任何方法

常见于需要 IP 白名单的线路:你的出口 IP 不在允许列表里,服务端直接拒绝或不回应。这类线路即使账号密码全对也连不上,必须先加白名单。

3. 认证返回非 0 状态码

账号密码错误、账号到期、并发数超限、账号与 IP 绑定不符,都会在这一步体现。这一层的失败原因和 HTTP 代理的 407 是同一性质,可以直接找服务商核对账号状态。

4. CONNECT 被拒

应答码会给出方向:网络不可达、主机不可达、连接被拒、TTL 过期、命令不支持等。这一层失败通常不是账号问题,而是目标地址或服务端出口的链路问题。用不同目标地址(比如不同网站的 443 端口)复测两次,就能区分是个别目标不可达还是整体出口异常。

三、DNS 在哪里解析,影响很大

SOCKS5 支持把域名交给代理解析(ATYP=0x03),也可以由客户端先解析成 IP 再连接(ATYP=0x01)。两者的区别在于:

遇到"代理能用但打开某站点显示地区不对"的情况,先看客户端是不是把域名在本地解析掉了。

四、UDP 转发:要不要单独验

SOCKS5 规范里定义了 UDP ASSOCIATE,但绝大多数代理只实现了 TCP 转发。所以一个代理"网页能用"并不代表"UDP 也能用"。

五、自查清单

  1. 确认端口确实是 SOCKS5,观察首字节是否为 0x05;
  2. 确认是否需要 IP 白名单,本机出口 IP 是否已加入;
  3. 确认账号是否到期、并发是否超限;
  4. 用两个以上不同目标地址做 CONNECT,排除单目标问题;
  5. 核查出口 IP 与落地地区,确认与购买时约定一致;
  6. 需要 UDP 的场景,单独验证 UDP 转发能力。
四协议一键检测:SK5 / HTTP / L2TP / SS

支持批量粘贴、自动识别格式,逐条给出可用性、出口 IP 与地区。