如何使用 curl 和 ::1 进行基于 ipv6 的环回?

如何使用 curl 和 ::1 进行基于 ipv6 的环回?

我尝试了几种方法,但它们似乎使卷曲变得混乱。

root@testt:~# curl localhost:8080
<h1>Hello world!</h1>

<p>Boom Bam Splat</p>
root@testt:~# curl ::1:8080
curl: (3) IPv6 numerical address used in URL without brackets
root@testt:~# curl [::1]:8080
curl: (3) [globbing] bad range specification in column 2

答案1

更新:截至 2022 年 12 月 28 日,并且至少是 Curl 版本 7.68.0,人们可以像这样简单地使用 Curl,无需标志-g,并且可以正常工作:

curl -6 "http://[::1]:8080/" 

以下是较早的答案,供参考。


查看建议——并分析常见错误在这篇博文中— 也许你应该尝试一下这个。

curl -g -6 "http://[::1]:8080/"

似乎-g是实现这一目标的神奇钥匙。正如curl手册页:

此选项关闭“URL 通配解析器”。设置此选项后,您可以指定包含字母 {}[] 的 URL,而无需由 curl 本身进行解释。请注意,这些字母不是正常的合法 URL 内容,但应根据 URI 标准对其进行编码。

-6仅使用 IPv6 的方法:

如果 libcurl 能够将地址解析为多个 IP 版本(如果它支持 IPv6 则可以),则此选项告诉 libcurl 仅将名称解析为 IPv6 地址。

但是阅读该功能描述,似乎-6对于纯 IPv6 地址来说并不是真正需要的;只有当一个人在连接到 IPv4 和 IPv6 地址的主机名上使用时,curl它才会优先使用 IPv6。只是需要注意一点。

答案2

从“curl --manual”中,我发现了这一点:

curl -g "http://[2001:1890:1112:1::20]/"

或者

curl "http://[2001:1890:1112:1::20]/"

因此,对于您询问的地址,请尝试:

curl -g "http://[::1]:8080/"

但是,您可能想要运行:

curl -V

看看 IPv6 是否出现在“Features”行上(第三行,不包括自动换行产生的额外行)。我发现我的版本没有出现。 cURL 下载页面有各种操作系统的链接,包括curl 7.41.0 下载站点(目前是最新版本)适用于 Microsoft Windows。该页面有多个可执行文件(适用于 Microsoft Windows);我发现的第一个不支持 IPv6。但两个描述为“ipv6-sspi-spnego-winssl”(一个适用于 x86,一个适用于 x64)的文件支持 IPv6:curl -V 确实显示了 IPv6。因此,请谨慎选择下载的软件包。

相关内容