Tor SOCKS5返回全零BND.ADDR与BND.PORT问题咨询
问题解答
很多人第一次碰到这个返回会误以为是Tor的Bug,但实际上这个行为完全符合SOCKS5的RFC 1928规范,属于Tor的标准实现逻辑。
根据SOCKS5协议标准,客户端发送CONNECT请求后,服务端返回成功响应(响应码0x00)时携带的绑定地址(BND.ADDR)、绑定端口字段,仅用于告知客户端「服务端和目标主机建立连接时使用的源地址信息」,协议本身从来没有要求客户端必须使用、校验这个字段的内容。
Tor作为匿名代理,核心设计目标就是隐藏代理侧的连接细节:它不会把出口节点的真实IP、本地建立出站连接的实际地址暴露给客户端,因此直接在绑定地址字段填充全零0.0.0.0、端口字段填0是刻意做的实现选择,不会对后续隧道通信造成任何影响。
- 你收到的响应
{5,0,0,1,0,0,0,0,0,0}里,第二个字节是0就已经代表SOCKS5协商全流程成功,当前TCP套接字已经是直连目标站点的可用隧道,不需要解析后续的绑定地址内容 - 无论你是把域名传给Tor做远程解析,还是本地解析完IPv4地址再传给Tor,只要连接建立成功,Tor都会返回全零的绑定地址,这个行为和启动参数、数据目录是否为tmpfs、Arch源的软件包版本都没有关系——你测试直接执行
tor命令启动也出现相同现象,已经可以排除环境异常的可能 - 你在这个套接字上发送HTTP请求能拿到正常响应,就是该行为无功能性影响的直接证明
写SOCKS5客户端逻辑的时候需要注意:只要CONNECT响应的返回码为成功,就可以直接在当前套接字上发送应用层请求,不要额外校验绑定地址必须为非零地址,否则会把Tor这类合规代理的正常响应误判为连接失败。
内容的提问来源于stack exchange,提问作者Halid Beslic
相关产品推荐
相关产品推荐

