gpt4 book ai didi

php - 将子网的特定 IPv6 地址分配给 cURL

转载 作者:行者123 更新时间:2023-12-01 10:55:44 32 4
gpt4 key购买 nike

我已经通过 /etc/network/interfaces 为我的专用主机分配了一个/64 IPv6 子网(发行版是 Debian Squeeze)

iface eth0 inet6 static
address 2a01:4f8:XXXX:YYYY::2
netmask 64
gateway fe80::1

现在,我想让 cURL (PHP 5.3.22-1~dotdeb.0) 使用该子网的一个特定 IP 地址,p.e. 2a01:4f8:XXXX:YYYY::3 所以我的代码如下所示:

curl_setopt($this->_curl, CURLOPT_INTERFACE, '2a01:4f8:XXXX:YYYY::3');
curl_setopt($this->_curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);

运行 curl_exec 时,我得到 bind failed with errno 99: Cannot assign requested address。为什么会这样?在 /etc/network/interfaces 中将每个 IPv6 地址定义为/128 时,如:

iface eth0 inet6 static
address 2a01:4f8:XXXX:YYYY::2
netmask 128
up ip -6 addr add 2a01:4f8:XXXX:YYYY::3/128 dev eth0 preferred_lft 0
gateway fe80::1

然后一切正常,cURL 使用 ::3 IP。但我的意图是使用我子网中的大量 IP(真的很多 IP),因此这是不可行的。有谁知道为什么 cURL 不能分配/64 子网的子 IP?

最佳答案

cURL 无法绑定(bind)到 2a01:4f8:XXXX:YYYY::3,因为 2a01:4f8:XXXX:YYYY::3 不是分配给任何接口(interface)的 IP 本地地址。主机只能在分配给它们的地址上接收数据包,因此,您只能绑定(bind)到这些地址。

正如您所描述的,如果您使用 ip addr add 在接口(interface)上添加 2a01:4f8:XXXX:YYYY::3 作为地址,它就可以工作。这是意料之中的事。

我不知道有什么方法可以将一大组地址分配给本地系统,而不必一个一个添加。有一个技巧,但它仅适用于某些操作系统(可能仅适用于 Linux)并且仅适用于 IPv4 且仅适用于环回接口(interface)。

关于php - 将子网的特定 IPv6 地址分配给 cURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269085/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com