怎么用脚本获取域名信息

wen 实用脚本 2

从WHOIS到DNS的自动化侦查全攻略

目录导读

  1. 为什么需要脚本化获取域名信息——手动查询的痛点与自动化价值
  2. 核心技术栈——Python/Shell/Bash 三大主流方案对比
  3. WHOIS信息抓取实战——注册商、到期时间、NS记录提取
  4. DNS解析数据采集——A记录、MX记录、TXT记录的批量获取
  5. 高级进阶——子域名枚举与CDN识别自动化
  6. 常见问题与解答(FAQ)——脚本报错、反爬限制、合规性讨论

为什么需要脚本化获取域名信息

在日常运维、网络安全审计或SEO竞品分析中,我们经常需要批量获取域名的注册信息、DNS解析记录、IP归属等数据,手动打开网页查询不仅效率低下,且无法应对上百个域名的场景,脚本化方案能将原本10分钟/域名的操作压缩到3秒/域名,同时支持定时任务自动巡检,这在域名过期监控、钓鱼站点溯源、CDN切换验证等场景中至关重要。

怎么用脚本获取域名信息

核心技术栈:Python vs Shell vs Bash

方案 优势 劣势 适用场景
Python + python-whois 跨平台、数据结构化好 需安装依赖库 复杂数据分析
Shell + whois命令 零依赖、系统自带 文本解析繁琐 Linux服务器快速查询
Bash + dig/nslookup DNS查询最快 仅限DNS记录 纯DNS批量检测

推荐首选Python,因为其python-whois库封装了WHOIS协议细节,且dnspython能完美处理DNS各类记录。

WHOIS信息抓取实战

核心脚本示例(Python):

import whois
def get_domain_info(domain):
    try:
        w = whois.whois(domain)
        return {
            'registrar': w.registrar,
            'expiration_date': str(w.expiration_date),
            'name_servers': w.name_servers,
            'status': w.status,
            'org': w.org
        }
    except Exception as e:
        return {'error': str(e)}
# 批量处理
domains = ['example.cn', 'test.net', 'demo.org']
for d in domains:
    print(f"{d} -> {get_domain_info(d)}")

关键技巧:

  • 使用try/except捕获超时或无法解析的域名,避免中断批量任务
  • 部分注册商(如阿里云)会隐藏WHOIS信息,需额外解析redacted for privacy字段
  • 建议设置socket.setdefaulttimeout(10)防止卡死

DNS解析数据采集

针对DNS记录的Python脚本:

import dns.resolver
def get_dns_records(domain, record_type):
    records = []
    try:
        answers = dns.resolver.resolve(domain, record_type)
        for rdata in answers:
            records.append(rdata.to_text())
    except Exception:
        pass
    return records
# 同时获取A、MX、TXT
for dom in ['example.com']:
    print("A记录:", get_dns_records(dom, 'A'))
    print("MX记录:", get_dns_records(dom, 'MX'))
    print("TXT记录:", get_dns_records(dom, 'TXT'))

注意点:

  • 部分域名只支持IPv6(AAAA记录),需同时查询
  • CNAME记录会覆盖A记录查询,需用dns.resolver.resolve(domain, 'CNAME')单独验证
  • 建议加lifetime=5参数控制查询时长

高级进阶:子域名枚举与CDN识别

结合 crt.sh 证书透明度日志,可批量获取子域名:

curl -s "https://crt.sh/?q=%25.example.com&output=json" | jq -r '.[].name_value' | sort -u

再通过IP段比对阿里云/腾讯云/Cloudflare的IP范围,能在脚本中自动标记CDN资产,此技术在红蓝对抗演练中效率极高。

常见问题与解答(FAQ)

Q1:脚本运行时报whois模块不存在怎么办? A:执行pip install python-whois dnspython即可,若在Linux下提示缺少whois命令,需apt install whois(Debian系)或yum install jwhois(CentOS系)。

Q2:批量查询1000个域名总有几个超时/无响应,如何优化? A:使用concurrent.futures.ThreadPoolExecutor实现多线程并发,设置最大线程数20,配合重试机制(3次,每次退避2秒),同时建议将结果写入CSV,断点续跑。

Q3:频繁脚本查询会被封IP吗? A:WHOIS服务器通常有速率限制(如5次/分钟),建议控制并发数,或使用公共WHOIS API(如whoisxmlapi.com)做代理层,对于DNS查询,本地缓存结果,避免反复请求。

Q4:如何确保脚本符合法律法规? A:仅查询自己拥有或已授权的域名信息,根据《网络安全法》,未经授权大规模采集他人域名数据可能涉及侵犯公民个人信息罪,请务必设定白名单机制,并在脚本中加入合规提示。

Q5:能获取到域名的历史注册人邮箱吗? A:多数注册商已默认隐藏WHOIS隐私,可尝试访问domain.glasssecuritytrails.com的API(付费),但这些第三方接口也有调用频率限制,脚本中需控制每秒请求数。


本文总结:通过Python脚本,我们能用不到50行代码实现域名的全维度信息采集,但需牢记——自动化工具是双刃剑,合理运用于资产审计、故障排查才是正确方向,建议初学者从单域名查询开始,逐步扩展为批量任务,并在实践中理解WHOIS协议的RFC 3912规范与DNS报文格式,才能真正掌握脚本背后的原理。

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