地址在SOCKS5报文里有三种写法,代理IP怎么认出它们

2026年09月05日

11 次

一条 SOCKS5 报文里,地址字段就有三种写法,短的 4 个字节,长的十几二十个字节。服务器靠一个叫 ATYP 的标记来区分,填错类型,连接当场失败。这条规则虽然藏在底层,却直接影响代理IP能不能连上目标。

先说结论:ATYP 是 SOCKS5 请求报文里的地址类型字段,取值为 1 表示 IPv4,3 表示域名,4 表示 IPv6。服务器读到这个值,才知道后面跟的地址该按多少字节、什么格式来解析。

类型一:IPv4 地址(ATYP=1)

这是最常见的一种。地址固定 4 个字节,像 203.0.113.10 这样的四段数字,每段占一个字节,不需要任何额外标记,写进报文就是 4 个字节的原始数字。

类型二:域名地址(ATYP=3)

域名不是定长的,所以报文里先写一个字节表示域名长度,再跟实际的域名内容。服务器读到 ATYP=3 后,会先取长度,再按长度读域名,然后自己去做解析。这个类型让客户端可以只传域名、不传解析结果。

类型三:IPv6 地址(ATYP=4)

IPv6 地址固定 16 个字节,比 IPv4 长得多。服务器读到 ATYP=4 后按 16 字节读取,存成 IPv6 格式。支持 IPv6 的代理IP环境才用得上这个类型,纯 IPv4 的老环境会直接报不支持。

三种类型对使用者来说意味着什么呢?最主要的一点是接入方式灵活:客户端既可以用 IP 直连,也可以用域名接入。用域名接入时,代理IP服务商可以随时调整域名背后的服务器,用户无需改动配置,这也是很多服务商推荐域名接入的原因。对代理IP用户来说,域名接入是省心又灵活的选择。

协议为什么要把地址类型单独标出来

因为地址不是定长的。IPv4、IPv6、域名三种写法长度完全不同,服务器必须知道后面跟的是什么,才能正确读取。ATYP 就是这张说明书,告诉服务器“接下来这串字节该怎么读”。

字节数不同:IPv4 固定 4 字节,IPv6 固定 16 字节,域名要先读长度。

域名要现查:ATYP=3 时由服务器解析,客户端传的是域名本身。

端口永远 2 字节:不管地址什么类型,端口都跟在地址后面占 2 字节。

类型填错就连不上:ATYP 写错,服务器按错格式读地址,连接必然失败。

理解了 ATYP,再看代理IP配置里那些地址字段,就会明白为什么有些连接要求填 IP、有些填域名也行。它不决定连接快慢,但决定连接能不能被正确建立起来。

实际排错时还有一个判断技巧:如果连接报错里出现地址解析相关的提示,先确认用的是哪种地址类型。填 IP 却按域名解析、或者填域名却没被识别,都会在 ATYP 这一环卡住,对照报文一看便知。对代理IP使用者来说,这个字段虽然藏在底层,却常常是连接失败的真正源头。

相关咨询请联系QQ/微信:157069302