如何使用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
相关产品推荐
相关产品推荐

