【问题标题】:Is it possible to set getaddrinfo() to only retrieve IPV4 addresses by default?是否可以将 getaddrinfo() 默认设置为仅检索 IPV4 地址?
【发布时间】:2012-12-11 21:14:34
【问题描述】:

Php curl 使用 getaddrinfo() 将主机名解析为 IP 地址。通过设置一个选项,它可以很容易地查找 IPV4 地址,但是当我们启动 IPv6 并在我们的网络上正常运行时,这将需要相当多的工作并且很难撤消。

有没有办法将 getaddrinfo() 设置为默认为我们整个 Ubuntu 服务器的 IPv4 查找?

谢谢 韦恩

【问题讨论】:

  • 您对 C 或 php 的解决方案感兴趣吗?
  • 两者都不是。我想在 sys 或 dev 中设置一个默认设置,将查找默认为 IPv4。
  • 好像没有这样的设置。这里有一些信息:askubuntu.com/questions/32298/…

标签: php c linux ipv4


【解决方案1】:

此解决方案适用于 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 启动并运行时,更改函数的内部“默认值”。

【讨论】:

  • 谢谢,不过我正在寻找一个全球性的解决方案。就像默认设置一样。
  • 只需为提供“默认值”的 getaddrinfo 创建一个包装函数。然后在整个应用程序中使用包装函数。当 ipv6 启动并运行时,更改函数的内部“默认值”。
【解决方案2】:

在 Linux 上,getaddrinfo() 的行为可以通过/etc/gai.conf 进行调整。您不能使用此文件来阻止返回 IPv6 地址,但您可以使用它来优先考虑 IPv4 地址而不是 IPv6 地址。

实际上,您只是希望 PHP/Curl 将 AI_ADDRCONFIG 标志传递给 getaddrinfo(),这将导致它仅在机器当前配置了 IPv6 地址时才返回 IPv6 地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2014-10-15
    • 2011-10-15
    • 2021-07-22
    • 2019-04-05
    • 2015-06-10
    • 2019-09-02
    相关资源
    最近更新 更多