连不上代理IP的时候,服务器其实已经递了张纸条说明原因,只是很多人没看协议层返回的那个字节。SOCKS5 在第四轮握手时会给出一条应答码,八种说法分别指向八类问题,看懂它,排查就有了方向。
先说结论:应答码藏在握手最后一轮的回复里,是协议层给的最直接线索。它和界面上报的“连接失败”不一样——界面报错是应用层翻译后的结果,应答码才是原始信息,两种对不上时,应以应答码为准往下查。
八种应答码,一张表看清
客户端发出请求后,服务器在第四轮回一个字节的状态码。拿到码之后,先把对应含义确认下来,再决定往哪个方向排查,比把整个配置翻一遍快得多。
| 应答码 | 含义 | 常见场景 | 排查方向 |
|---|---|---|---|
| 00 | 成功 | 连接建立正常 | 无需处理 |
| 01 | 一般失败 | 说不清的具体错误 | 从配置到网络逐层查 |
| 02 | 规则不允许 | 服务器策略拒绝 | 联系服务商确认限制 |
| 03 | 网络不可达 | 路由不通 | 查服务器到目标网络 |
| 04 | 主机不可达 | 目标地址解析不到 | 核对目标地址 |
| 05 | 连接被拒 | 目标端口没开 | 换目标或换端口 |
| 06 | TTL 过期 | 路由跳数超限 | 检查路由环路 |
| 07 | 命令不支持 | 客户端发了不认识的命令 | 升级客户端或协议栈 |
| 08 | 地址类型不支持 | ATYP 填了不认的类型 | 换 IPv4 或域名方式 |

拿到应答码之后,先对照表格确认含义,再看它出现在哪个环节。比如 03 和 04 都指向网络层问题,区别在于一个是路由不通、一个是地址解析不到;05 则是目标端口本身没有服务在监听。对代理IP使用者来说,把码值和场景放在一起看,排查方向就清晰了。
应答码和界面报错对不上的时候
有时候界面写的是超时,协议层给的却是 05 连接被拒,这说明中间某个环节把错误翻译了一遍。遇到这种情况,以协议层应答码为准去查目标端,而不是盯着界面提示反复试。
还有一类情况是服务器根本不回应答码——比如第一轮问候就没得到回应,那连纸条都没有,问题多半出在更前面:端口不通、地址填错,或者服务器压根没起来。
还有一个容易忽略的细节:应答码只代表代理IP服务器这一跳的状态,不代表目标站的状态。比如 05 连接被拒,可能是代理服务器到目标站的路上被拒,也可能是目标站拒绝了代理服务器的连接,两种情况要查的地方完全不同。
把八种码按大类记会更省力:00 是成功,01 是兜底,02 是策略层,03、04、05、06 都是网络层,07、08 是协议层。记住这个分组,排查代理IP连接问题时,遇到不认识的码也能先判断大概方向,再查具体含义。
小结:把应答码当作协议层的第一手线索,能省下大量盲查时间。代理IP连接出问题时先看这一码,再顺着对应方向往下走,多数情况一两步就能定位。最后提醒一点:不要把应答码当成一切,理解自家代理IP服务商的行为模式,才能正确解读每一个码。
