我有一个 dante socks 服务器,配置为监听 ipv4 IP 并具有 ipv6 外部 IP。
我正在尝试弄清楚如何验证它是否真的有效。
我尝试使用curl
但如果我输入:
curl http://google.com --socs5 1.2.3.4:9000
我会在 date socks 端收到错误,因为它google.com
解析为 ipv4 地址,而 dante 表示它无法路由 IPv4,因为它没有将 IPv4 地址配置为外部地址。这几乎是意料之中的。
然后我找到了-6
curl 的参数。它现在解析google.com
为 IPv6 地址,但现在也尝试解析1.2.3.4
为错误的 IPv6 地址。
如果我尝试明确使用 IPv6 作为 curl 的 URL,我会收到错误:
curl 'http://[2a00:1450:400c:c03:0:0:0:8b]/' --socks5 1.2.3.4:9000
我还尝试将代理链与 telnet 一起使用,但如果我在代理链中指定 IPv4 地址作为代理,则似乎:
socks5 1.2.3.4
如果使用 IPv6 和 telnet,它只会忽略该代理并直接发出请求:
proxychains telnet 2a00:1450:400c:c03:0:0:0:8b 25
那么,如何通过 IPv4 地址上的 Socks 代理 telnet 到具有 IPv6 地址的对象?
答案1
您所看到的只是众多原因之一,说明为什么通过 SOCKS 发送主机名并让 SOCKS 服务器将其解析为 IP 地址几乎总是比在 SOCKS 客户端上解析 IP 地址更好。
在curl
手册页中,我发现提到了两个不同的 SOCKS5 选项,具体取决于您要在哪一侧解析主机名。--socks5
将在客户端上解析主机名,--socks5-hostname
将在服务器上解析主机名。我建议使用后者。其他SOCKS
客户端可能也需要配置为在 SOCKS 服务器上执行主机名解析。例如,我发现 Firefox 默认会在客户端解析主机名,但它确实有一个配置选项可以在服务器上执行此操作。
手册页建议使用--proxy
而不是--socks*
选项。根据我的阅读,正确的语法应该是--proxy socks5h://192.0.2.4:9000/