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

如何从Python dns.resolver的DNS查询响应中提取纯IP地址?

提取DNS查询结果中的IP地址

你不需要处理完整的DNS响应报文,dns.resolver.resolve()返回的answer对象本身就包含了可直接提取的IP记录。以下是修改后的代码,能直接得到列表/字典格式的结构化结果:

import dns.resolver

my_resolver = dns.resolver.Resolver()

dns_list = ['8.8.8.8', '8.8.4.4', '1.2.3.4']
# 用字典存储每个DNS服务器对应的查询结果
query_result = {}

for server in dns_list:
    try:
        my_resolver.nameservers = [server]
        # 执行A记录查询(默认就是A记录,可显式指定dns.rdatatype.A)
        answer = my_resolver.resolve('google.com', dns.rdatatype.A)
        # 提取所有IP地址到列表
        ip_list = [record.address for record in answer]
        query_result[server] = ip_list
        print(f"[{server}] 查询到IP: {ip_list}")
    except dns.resolver.LifetimeTimeout:
        query_result[server] = "查询超时"
        print(f"[{server}] 错误: 查询超时")
    except dns.resolver.NXDOMAIN:
        query_result[server] = "域名不存在"
        print(f"[{server}] 错误: 域名不存在")
    except Exception as e:
        query_result[server] = f"查询失败: {str(e)}"
        print(f"[{server}] 错误: {str(e)}")

# 输出最终结构化结果
print("\n=== 最终结构化结果 ===")
print(query_result)

关键说明

  • answer是可迭代对象,每个元素对应一条DNS记录,通过record.address属性可直接获取IP字符串。
  • 用列表推导式[record.address for record in answer]可以快速得到IP列表,满足你对结构化数据的需求。
  • answer.response是完整的DNS报文对象,仅用于调试或需要分析完整响应头/权威记录等场景,提取IP时无需使用它。

内容的提问来源于stack exchange,提问作者Husky-CGN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:20:51