PHP curl 使用 getaddrinfo() 将主机名解析为 IP 地址。通过设置一个选项,它可以很容易地查找 IPV4 地址,但是当我们启动 IPv6 并在我们的网络上正常运行时,这将需要相当多的工作并且很难撤消。
有没有办法将 getaddrinfo() 设置为默认为我们整个 Ubuntu 服务器的 IPv4 查找?
谢谢韦恩
此解决方案适用于 C,不确定 php。调用 getaddrinfo 时,您传递一个 struct addrinfo 提供有关您要查找的内容的“提示”。下面的例子
struct addrinfo *res;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_INET;
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("localhost", "80", &hints, &res);
从我的评论中复制如下,因为它似乎适用于答案:
只需为提供“默认值”的 getaddrinfo 创建一个包装函数。然后在整个应用程序中使用包装函数。当 ipv6 启动并运行时,更改函数的内部“默认值”。
在 Linux 上,getaddrinfo()
可以使用/etc/gai.conf
. 您不能使用此文件来防止返回 IPv6 地址,但可以使用它来确定 IPv4 地址的优先级高于 IPv6 地址。
但实际上,您只是希望 PHP/Curl 将AI_ADDRCONFIG
标志传递给getaddrinfo()
,这将导致它仅在机器当前配置了 IPv6 地址时才返回 IPv6 地址。