You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统下如何增加getaddrinfo返回的IP地址数量?

解决getaddrinfo返回IP数量有限的问题(Ubuntu环境)
  • 先确认DNS服务器的返回能力
    直接用dig命令测试目标域名的DNS返回数量,比如:

    dig your-domain.com A +short | wc -l
    dig your-domain.com AAAA +short | wc -l
    

    如果DNS服务器本身只返回8个IP,那getaddrinfo也拿不到更多——这时候换个更全的DNS服务器,比如Cloudflare的1.1.1.1或者Google的8.8.8.8,修改Ubuntu的DNS配置即可(比如在/etc/systemd/resolved.conf里设置DNS=1.1.1.1 8.8.8.8,然后重启systemd-resolved服务)。

  • 启用DNS TCP查询突破UDP大小限制
    UDP协议的DNS响应默认有大小限制(传统是512字节,即使EDNS0扩展后也可能被服务器限制),如果目标域名的IP数量多,UDP响应会被截断,导致getaddrinfo只能拿到部分IP。
    在Ubuntu的DNS配置里启用TCP查询:

    1. 如果用systemd-resolved,编辑/etc/systemd/resolved.conf,添加或修改:
      DNSOverTLS=opportunistic
      
      或者直接在/etc/resolv.conf里添加(注意如果resolv.conf是symlink到systemd-resolved的,需要先取消链接再修改):
      options use-vc
      
    2. 重启DNS服务:sudo systemctl restart systemd-resolved
  • 清理DNS缓存解决重复返回问题
    多次调用getaddrinfo返回相同地址,是因为系统DNS缓存(比如systemd-resolved或nscd)保存了之前的查询结果。要刷新缓存:

    • 用systemd-resolved的话:sudo systemctl restart systemd-resolved
    • 用nscd的话:sudo nscd -i hosts
  • 绕过getaddrinfo手动解析DNS
    如果上面的方法都无法获取更多IP,可以直接用DNS解析库(比如libdns、libldns)自己实现查询逻辑,直接解析DNS响应包,这样能拿到域名对应的所有IP地址,不受getaddrinfo的默认限制。

内容的提问来源于stack exchange,提问作者rare77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:57:33