通过 IPv4 代理 Telnet 到 IPv6 主机

通过 IPv4 代理 Telnet 到 IPv6 主机

我有一个 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 地址配置为外部地址。这几乎是意料之中的。

然后我找到了-6curl 的参数。它现在解析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/

相关内容