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

如何使用dnspython查询指定域名的全部IP地址?

嘿,我来帮你搞定这个问题!你遇到的情况很常见——dnspython其实已经拿到了所有IP,但大概率是你的脚本只提取了第一个结果。咱们一步步来修正:

问题根源

你之前的简易脚本可能只取了解析结果里的第一条记录,但实际上dnspython返回的Answer对象里包含了该域名关联的所有IP地址,只是需要你主动遍历提取。

正确的实现方式

dnspython的dns.resolver.resolve()(新版本推荐使用,旧版对应dns.resolver.query())会返回一个包含全部解析结果的集合,你只需要遍历这个集合,就能拿到所有有效IP。

完整示例代码

import dns.resolver

def get_all_domain_ips(domain):
    try:
        # 解析IPv4的A记录,若要获取IPv6地址可替换为'AAAA'
        resolved_answers = dns.resolver.resolve(domain, 'A')
        # 遍历所有结果,提取每个记录的IP地址
        all_ips = [answer.address for answer in resolved_answers]
        return all_ips
    except dns.resolver.NXDOMAIN:
        return f"错误:域名 {domain} 不存在"
    except dns.resolver.NoAnswer:
        return f"错误:域名 {domain} 没有对应的A记录"
    except Exception as e:
        return f"解析过程出错:{str(e)}"

# 测试调用
if __name__ == "__main__":
    target_domain = "google.co.uk"
    ip_results = get_all_domain_ips(target_domain)
    if isinstance(ip_results, list):
        print(f"域名 {target_domain} 解析到的所有IP地址:")
        for idx, ip in enumerate(ip_results, 1):
            print(f"{idx}. {ip}")
    else:
        print(ip_results)
额外优化提示
  • 指定DNS服务器解析:不同DNS服务器返回的IP可能存在差异(比如你本地DNS和公共DNS),如果想和其他工具用同一DNS解析,可添加指定逻辑:
    # 实例化Resolver对象,指定用谷歌公共DNS(8.8.8.8)解析
    custom_resolver = dns.resolver.Resolver()
    custom_resolver.nameservers = ['8.8.8.8']
    resolved_answers = custom_resolver.resolve(target_domain, 'A')
    
  • IPv6支持:把查询类型从'A'改成'AAAA',就能获取该域名的IPv6地址列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:58:23