怎样实现批量查询域名信息

wen 实用脚本 29

本文目录导读:

怎样实现批量查询域名信息

  1. 方案一:使用在线批量查询工具(零代码,适合小白)
  2. 方案二:使用命令行脚本(Python + 开源库,适合开发者)
  3. 方案三:调用企业级 API(高频率、高可靠性,适合生产环境)
  4. 总结建议
  5. 注意事项

实现批量查询域名信息(如注册信息、DNS记录、Whois数据等)有多种方法,取决于你的技术栈、预算和需要的详细程度。

以下是三种主流方案,从简单到复杂,适用于不同场景。

使用在线批量查询工具(零代码,适合小白)

这是最快、最简单的方法,适合对几到几百个域名进行一次性查询,无需编程。

  • 推荐工具
    • Whois.com 批量查询:支持一次输入多个域名,查询Whois信息。
    • Domaintools:专业工具,提供批量Whois查询、反向IP查询等,部分功能免费。
    • 站长工具(如 chinaz.com):支持批量Ping、DNS查询、Whois查询(国内速度更快)。
  • 步骤
    1. 打开网站。
    2. 找到“批量查询”或“多域名查询”输入框。
    3. 一行一个域名,粘贴进去。
    4. 点击查询,等待结果。
  • 优点:无需任何设置。
  • 缺点:隐私性差(数据会经过第三方服务器),查询数量有限制,无法自动化集成。

使用命令行脚本(Python + 开源库,适合开发者)

这是最灵活、可定制、可自动化的方式,你可以读取一个包含域名的文件,然后批量获取信息。

批量获取 WhoIs 信息(注册人、到期时间等)

使用 whois 库。

  • 安装依赖

    pip install python-whois
  • Python 脚本示例 (bulk_whois.py):

    import whois
    import pandas as pd # 用于保存为Excel或CSV
    from tqdm import tqdm # 显示进度条
    # 要查询的域名列表
    domains = ["example.com", "google.com", "github.com", "nonexistentdomain.xyz"]
    results = []
    for domain in tqdm(domains, desc="查询Whois"):
        try:
            w = whois.whois(domain)
            results.append({
                "domain": domain,
                "registrar": w.registrar,
                "creation_date": w.creation_date,
                "expiration_date": w.expiration_date,
                "name_servers": w.name_servers if w.name_servers else [],
                "status": "Success"
            })
        except Exception as e:
            results.append({
                "domain": domain,
                "registrar": "Error",
                "creation_date": None,
                "expiration_date": None,
                "name_servers": [],
                "status": f"Error: {e}"
            })
    # 保存为 CSV 文件
    df = pd.DataFrame(results)
    df.to_csv("domain_whois_results.csv", index=False, encoding='utf-8-sig')
    print("查询完成,结果保存在 domain_whois_results.csv")

批量获取 DNS 记录(A记录、MX记录等)

使用 dnspython 库。

  • 安装依赖

    pip install dnspython
  • Python 脚本示例

    import dns.resolver
    import pandas as pd
    domains = ["example.com", "google.com"]
    record_types = ["A", "MX", "NS", "TXT"]
    results = []
    for domain in domains:
        for record_type in record_types:
            try:
                answers = dns.resolver.resolve(domain, record_type)
                for rdata in answers:
                    results.append({
                        "domain": domain,
                        "type": record_type,
                        "value": str(rdata)
                    })
            except dns.resolver.NoAnswer:
                results.append({"domain": domain, "type": record_type, "value": "No Record"})
            except Exception as e:
                results.append({"domain": domain, "type": record_type, "value": f"Error: {e}"})
    df = pd.DataFrame(results)
    df.to_csv("domain_dns_results.csv", index=False)
    print("DNS查询完成")

优先考虑异步处理(高性能)

对于几千或几万个域名,同步请求会很慢,使用 aiohttpasyncio 可以显著提高速度。

import asyncio
import aiohttp
import whois  # 注意:whois库本身是同步的,需要注意,但可通过 run_in_executor 优化。
# 核心思路:使用 asyncio 并发执行多个查询任务

调用企业级 API(高频率、高可靠性,适合生产环境)

如果你需要频繁查询大量域名(每天几万次以上),或者需要更准确的数据(如实时Whois、注册商API),建议使用付费API。

  • 推荐服务

    • WhoisXML API:提供Whois、DNS、反向Whois等全集,按查询次数付费。
    • SecurityTrails:提供DNS历史、子域名枚举、Whois等,API功能强大。
    • DomainTools API:行业标准,数据丰富,但较贵。
    • IP2Location:提供Whois、DNS和IP定位。
  • 实现方式

    1. 在服务商网站注册并获取 API Key。
    2. 编写脚本发送 HTTP 请求。
    3. 解析 JSON/XML 响应。
  • 示例(伪代码)

    import requests
    import pandas as pd
    API_KEY = "你的_WHOISXML_API_KEY"
    domains = ["example.com", "google.com"]
    results = []
    for domain in domains:
        url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={API_KEY}&domainName={domain}&outputFormat=JSON"
        response = requests.get(url)
        data = response.json()
        # 解析 data 提取域名、注册人、到期日等
        results.append(...)

总结建议

场景 推荐方案 原因
一次查询几十个域名 在线工具 最快,不需要写代码
查询几百个域名 Python + python-whois + dnspython 可以导出CSV,可定制
查询几千个域名 Python + 异步库(aiohttp) 速度大幅提升
每日查询上万次 调用稳定API(如WhoisXML) 避免被封IP,数据更准确
需要域名注册API 调用域名注册商API(如GoDaddy, Namecheap, 阿里云) 可以查询自己账户下的域名状态

注意事项

  1. 速率限制:无论是Whois服务器还是在线API,都有请求频率限制,频繁请求可能导致你的IP被临时封禁,建议在脚本中添加 time.sleep(1) 或使用指数退避策略。
  2. 数据准确性:很多域名开启了Whois隐私保护,公开的Whois信息可能是代理商的,而非真实的注册人信息。
  3. 合规性:查询到的Whois信息受法律保护,不要用于批量营销或骚扰,否则可能违反GDPR等法规。
  4. 命令行替代:如果你熟悉Linux,也可以直接用 whois 命令配合 xargsparallel
    cat domains.txt | xargs -P 10 -I {} whois {} > output.txt

如果你能提供更详细的需求(如需要查询的具体信息类型、数量级、编程语言偏好),我可以帮你定制更精确的代码。

抱歉,评论功能暂时关闭!