news 2026/5/10 11:06:55

零依赖域名情报工具:被动侦察与自动化集成实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零依赖域名情报工具:被动侦察与自动化集成实践

1. 项目概述:一个纯粹、高效的被动域名情报收集工具

在网络安全研究、竞争对手分析甚至是日常的域名投资中,我们经常需要快速获取一个域名的“身份信息”。这些信息散落在各处:子域名揭示了目标的业务架构,SSL证书暴露了服务器的配置和有效期,WHOIS记录则像一份公开的“户口本”,而DNS记录则描绘了其网络服务的蓝图。市面上有大量工具可以完成这些任务,但它们往往需要安装复杂的依赖库、申请昂贵的API密钥,或者输出格式杂乱,难以集成到自动化流程中。

今天要聊的这个项目domain-intel,就精准地切中了这个痛点。它是一个为AI Agent(特别是OpenClaw框架)设计的技能(Skill),但其核心价值远不止于此。它最大的特点是“零依赖、零API密钥”,仅使用Python标准库,就能完成从子域名发现、SSL证书检查、WHOIS查询到DNS记录获取等一系列被动侦察任务。这意味着你可以在任何一台有Python环境的机器上,无需联网安装任何额外包,就能获得结构化的JSON输出,非常适合嵌入到自动化脚本、CI/CD流程或作为AI Agent的“眼睛”和“耳朵”。

如果你是一名安全研究员、运维工程师、产品经理,或者只是对某个域名感到好奇,这个工具都能让你用最轻量的方式,快速拼凑出目标的数字画像。

2. 核心设计思路:为什么选择“纯标准库”方案?

2.1 极致的可移植性与可靠性

domain-intel最核心的设计哲学是“开箱即用,随处可跑”。依赖第三方库(如requests,cryptography,dnspython)固然方便,但它们引入了版本兼容性、网络安装、潜在的安全漏洞(供应链攻击)等问题。对于一个旨在进行基础信息收集的工具,尤其是可能被AI Agent在未知环境中调用的技能,这些不确定性是致命的。

通过坚持使用Python标准库(如socket,ssl,json,urllib.request),domain-intel确保了其运行环境的高度确定性。只要系统有Python(版本3.6以上),工具就能工作。这种设计极大地提升了工具的可靠性和部署成功率,特别适合在受限环境、临时容器或自动化流水线中运行。

2.2 被动侦察的伦理与法律边界

项目描述中明确强调了“Passive”(被动)侦察。这是网络安全领域一个重要的伦理和法律概念。主动侦察(如端口扫描、暴力破解)会向目标服务器发送大量探测包,可能触发对方的入侵检测系统(IDS)甚至构成法律风险。

而被动侦察,是通过查询公开的、第三方持有的信息来获取情报。domain-intel的所有数据源都符合这一原则:

  • 子域名发现:查询的是公开的证书透明度(Certificate Transparency, CT)日志(如 crt.sh),这些是证书颁发机构(CA)依法公开的数据。
  • WHOIS查询:通过标准的WHOIS协议(TCP 43端口)向域名注册局公开的数据库发起查询。
  • DNS记录:使用操作系统的本地DNS解析器进行查询,这属于正常的网络服务请求。
  • SSL证书:与目标服务器建立一次标准的TLS握手来获取证书,这是建立任何HTTPS连接前的必要步骤。

这种纯粹被动的特性,使得工具的使用在法律和道德层面更加清晰,适用于更广泛的商业和技术分析场景。

2.3 结构化输出为自动化而生

工具的所有命令输出都是结构化JSON。这对于人眼阅读可能不如表格美观,但对于程序处理却是黄金标准。AI Agent可以直接解析JSON对象,提取关键字段;脚本可以轻松地将结果存入数据库或生成报告;不同模块的结果可以无缝合并。这种设计体现了其作为“AI Agent技能”的本质——为机器交互优化,而非仅为人类命令行设计。

3. 功能模块深度解析与实操要点

domain-intel提供了六个核心命令,每个都对应一种关键的侦察维度。下面我们逐一拆解其原理、使用方法和实战技巧。

3.1 子域名发现:利用证书透明度日志

命令python3 domain_intel.py subdomains example.com

原理:当网站申请SSL/TLS证书时,正规的证书颁发机构(CA)必须将颁发的证书记录到公开的证书透明度(CT)日志中。这些日志包含了证书的通用名称(CN)和主题备用名称(SAN),里面常常列有大量的子域名。crt.sh是一个聚合查询这些CT日志的公共服务。该工具通过向crt.sh的公共API接口发送查询,来获取与目标主域名相关的所有证书记录,从而提取出子域名列表。

实操要点与技巧

  1. 覆盖面与时效性:CT日志的覆盖非常广,几乎涵盖了所有使用HTTPS的知名站点。它能发现那些不直接对外提供Web服务,但同样需要证书的子域名(如API接口、内部管理后台)。但请注意,CT日志的更新可能有几小时到一天的延迟,且对于完全不使用SSL证书的子域名(纯HTTP或内部服务)无效。
  2. 结果去重与过滤crt.sh返回的结果可能包含通配符证书(如*.example.com)、同一子域名的多条历史记录,甚至是一些测试或错误的条目。工具本身会做基础处理,但高级用户可能需要编写后处理脚本,根据模式(如只保留*.prod,*.api等)进行过滤。
  3. 速率限制:虽然crt.sh是公开服务,但频繁、大量的查询可能会触发其速率限制。在批量扫描时,建议在请求间添加随机延迟(如time.sleep(1))。

注意:此方法获取的子域名列表是“理论上存在”的,并不代表它们当前一定可访问或在线。它只是一个强大的起点,后续需要结合DNS解析或HTTP探测来验证其活跃性。

3.2 SSL证书检查:一眼看穿服务器的安全配置

命令python3 domain_intel.py ssl example.com

原理:工具会模拟一个简单的TLS客户端,连接到目标域名的443端口,完成握手并获取服务器返回的证书。然后,它使用sslcryptography(注:cryptography是许多系统Python发行版中已包含的,但严格说不是“纯”标准库;原作者可能指核心逻辑用标准库,或做了特殊处理)库来解析证书的各个字段。

它能告诉你什么

  • 有效期:证书何时生效、何时过期。这是运维中最关键的监控点之一。
  • 颁发者:证书是由哪个机构(如 Let‘s Encrypt, DigiCert)签发的。
  • 加密算法:证书使用的签名算法(如 SHA256-RSA)和公钥算法。
  • 主题备用名称:证书除了主域名外,还覆盖了哪些其他域名(SANs),这本身也是发现子域名的一种方式。

实操心得

  • 连接超时与错误处理:如果目标服务器443端口不开放或SSL配置错误,命令会失败。在生产脚本中,需要添加try...except块来捕获socket.timeout,ConnectionRefusedError等异常。
  • 证书链验证:工具可能只获取服务器发送的叶证书。要检查完整的信任链,需要额外获取中间CA证书。这对于深度安全审计是必要的步骤。
  • 解读SANs字段:仔细查看SANs列表,你可能会发现开发、测试、备份甚至是不该对外暴露的内部系统的域名,这些是攻击面评估的宝贵信息。

3.3 WHOIS查询:挖掘域名注册的元数据

命令python3 domain_intel.py whois example.com

原理:WHOIS是一个古老的协议(RFC 3912),运行在TCP 43端口上。工具首先确定目标域名的顶级域,然后连接到该TLD对应的IANA指定的WHOIS服务器,发送查询请求并解析返回的文本信息。不同注册局的WHOIS输出格式千差万别,工具需要包含一个解析器来从这些非结构化的文本中提取出结构化的字段(如注册人、注册商、创建日期、过期日期、名称服务器等)。

关键信息解读

  • 注册日期与过期日期:判断域名年龄和续费状态。一个刚注册不久的域名可能风险较高或具有投机性质。
  • 注册人/机构:注意,由于隐私保护服务(Whois Privacy)的普及,此字段常常显示为代理信息。
  • 名称服务器:这直接指向了域名DNS托管在哪里(如 Cloudflare, AWS Route53, 阿里云)。切换名称服务器通常是网站迁移的第一步信号。

避坑指南

  • TLD支持:工具声称支持“100+ TLDs”。这意味着它内建了一个TLD到WHOIS服务器的映射表。对于非常小众的国家代码顶级域,可能会查询失败。使用时需确认你的目标TLD在支持列表中。
  • 速率限制与封禁:WHOIS服务器对查询频率有严格限制,过快或过多的查询会导致你的IP被临时封禁。批量查询时,必须设置较长的间隔(建议5-10秒以上)。
  • 数据格式变化:注册局可能会更改WHOIS输出的格式,导致解析器失效。如果发现某个TLD的查询结果字段缺失或错乱,可能是这个原因。

3.4 DNS记录查询:勾勒网络服务地图

命令python3 domain_intel.py dns example.com

原理:该命令利用操作系统自带的DNS解析器(通过Python标准库socket.getaddrinfodns.resolver——如果后者可用的话,但纯标准库方案可能用socket模拟)来查询最常见的记录类型。它并非实现一个完整的DNS协议栈,而是依赖系统配置的DNS服务器(如8.8.8.8或本地路由器)进行递归查询。

查询的记录类型及意义

  • A / AAAA记录:指向网站的IPv4/IPv6地址。多个A记录可能意味着负载均衡。
  • MX记录:邮件交换服务器地址,告诉你目标使用哪家的邮件服务(如Google Workspace, Microsoft 365)。
  • NS记录:权威名称服务器,与WHOIS中的信息相互印证。
  • TXT记录:常包含SPF、DKIM等邮件安全配置,Google Search Console验证代码,或其他服务商的身份验证信息。
  • CNAME记录:别名记录,可能将子域名指向第三方服务(如blog.example.comCNAME 到xxx.github.io)。

操作技巧

  • DNS服务器选择:工具使用系统默认DNS。为了获得更快、更稳定或更全面的结果(如绕过某些地域屏蔽),你可以在运行命令前临时修改系统的DNS设置,或者更优雅地,在工具代码中指定一个公共DNS(如1.1.1.1)。
  • 非标准端口与协议:此命令通常只查询标准类型和端口。要查询SRV,PTR等记录,或指定DNS-over-HTTPS,需要更专业的DNS库,这就违背了“零依赖”的初衷。
  • 缓存问题:DNS结果有TTL缓存。如果你刚刚修改了DNS记录,查询到的可能还是旧结果。可以尝试刷新本地DNS缓存(如ipconfig /flushdnssystemd-resolve --flush-caches)。

3.5 域名可用性检查:智能的批量筛选助手

命令python3 domain_intel.py available coolstartup.io

原理:这不是一个简单的WHOIS查询。它是一个“被动信号聚合”检查。工具会综合多项指标来判断一个域名是否可能被注册或使用:

  1. DNS解析:查询A/AAAA记录。如果能解析到IP,几乎肯定已被使用。
  2. WHOIS状态:检查WHOIS返回的域名状态。某些状态(如clientDeleteProhibited)明确表示已注册。
  3. SSL证书:尝试连接443端口获取证书。如果能获得有效证书,则域名肯定被用于Web服务。

只有当所有被动检查都强烈暗示域名未被占用时,工具才会返回“available”: true。这种方法避免了直接向注册局发起昂贵的“注册查询”,快速且免费,非常适合用于批量筛选创意域名。

重要提示:这种方法存在“假阴性”风险。一个域名可能已被注册,但持有人没有设置DNS(域名停放)、没有启用WHOIS隐私(导致信息不明显)、也没有部署SSL。这种情况下,工具可能错误地判断为可用。因此,在最终决定购买前,务必通过正规域名注册商进行最终的可用性查询。此工具的结果仅适用于前期海量筛选。

3.6 批量分析:一键获取多维度全景报告

命令python3 domain_intel.py bulk example.com github.com google.com

原理:这是前面所有功能的集大成者。它顺序或并发地对输入的每一个域名执行一系列检查(默认可能是全部检查,或通过--checks参数指定)。它将每个域名的各项结果聚合起来,形成一个完整的“域名档案”。

使用场景与技巧

  • 竞争对手对比分析:批量输入竞争对手的域名,一次性获取他们的子域名结构、使用的云服务商(通过NS记录)、SSL证书提供商、域名注册年限等,进行横向对比。
  • 资产清单梳理:输入自己公司所有的域名,快速生成一份基础信息清单,用于安全资产管理。
  • 参数定制:使用--checks ssl,dns可以只进行指定的检查,加快速度,减少对WHOIS服务器的压力。
  • 输出处理:批量输出的JSON结构可能非常庞大。建议结合jq命令行工具进行过滤和提取,例如提取所有过期的SSL证书:python3 domain_intel.py bulk ... | jq '.[] | select(.ssl.expired == true)'

4. 实战部署与集成应用指南

4.1 安装与配置详解

根据项目说明,安装非常简单,就是复制文件夹到OpenClaw的技能目录。但我们可以更深入地理解其作为独立工具的运行方式。

# 1. 克隆或下载项目 git clone https://github.com/Cat-tj/domain-intel.git cd domain-intel # 2. 直接作为独立脚本运行(无需安装到OpenClaw) # 确保脚本有执行权限 chmod +x scripts/domain_intel.py # 3. 运行测试 python3 scripts/domain_intel.py dns github.com

环境要求:理论上,任何安装了Python 3.6+的环境都可以运行。但需要注意:

  • 网络连接:所有功能都需要访问互联网(查询公共API、连接WHOIS服务器、DNS解析等)。
  • 防火墙:确保出站流量可以访问TCP 43端口(WHOIS)、443端口(SSL)以及DNS端口(53/UDP,或通过系统解析器)。
  • 编码问题:WHOIS服务器返回的文本可能是各种编码(如UTF-8, ISO-8859-1)。脚本需要做好编码探测和转换,否则可能输出乱码。

4.2 集成到自动化工作流

domain-intel的结构化JSON输出使其天生适合自动化。

场景一:每日SSL证书过期监控

#!/bin/bash DOMAINS="myapp.com api.myapp.com internal.myapp.com" for domain in $DOMAINS; do result=$(python3 /path/to/domain_intel.py ssl $domain) expiry_date=$(echo $result | jq -r '.ssl.not_after') # 将日期转换为时间戳并与当前时间比较 if [[ $(date -d "$expiry_date" +%s) -lt $(date -d "+30 days" +%s) ]]; then echo "警告: 域名 $domain 的SSL证书将在30天内过期!" # 发送邮件或Slack通知 fi done

场景二:CI/CD中的安全门禁在部署新服务前,可以检查其域名配置是否合规。

# 假设在GitLab CI中 security_scan: stage: test script: - python3 domain_intel.py ssl $NEW_DOMAIN > ssl_report.json - python3 check_policy.py ssl_report.json # 自定义脚本检查:证书是否来自受信CA、密钥长度是否达标等 - if [ $? -ne 0 ]; then exit 1; fi # 检查不通过则阻断部署

场景三:为AI Agent提供数据源在OpenClaw或其他AI Agent框架中,domain-intel作为一个技能被调用。当用户询问“请分析一下example.com这个网站”时,Agent可以自动调用该技能,获取结构化的域名情报,并基于这些数据生成分析报告或回答更深入的问题。

4.3 性能优化与注意事项

  1. 并发与速率限制:批量分析时,默认可能是串行执行,对于大量域名会非常慢。可以考虑用Python的concurrent.futures模块实现线程池并发。但必须特别注意对WHOIS和crt.sh的查询频率,避免触发反爬机制。建议为这些外部查询添加全局速率限制器。
  2. 结果缓存:对于不常变化的数据(如WHOIS信息,变化周期以天计),可以将结果缓存到本地文件或数据库中,并设置合理的TTL。下次查询时优先使用缓存,能极大提升重复查询的速度并减轻对公共服务的压力。
  3. 错误重试与降级:网络请求可能失败。实现简单的重试逻辑(如最多3次,指数退避)可以提高鲁棒性。对于非核心的检查项(如SSL检查),如果失败,可以返回部分数据或标记为错误,而不是让整个批量任务失败。
  4. 输出美化:虽然JSON适合机器,但人眼也需要阅读。可以编写一个简单的包装脚本,使用jq或Python的pprint模块将JSON输出格式化成更易读的树状或表格形式。

5. 常见问题与排查技巧实录

在实际使用中,你可能会遇到以下问题。这里记录了我踩过的一些坑和解决方法。

5.1 命令执行报错或无输出

问题现象:运行任何命令都立即报错,或长时间挂起后无输出。

排查步骤

  1. 检查Python版本python3 --version。确保是3.6或更高版本。
  2. 检查脚本路径和权限:确保你在正确的目录,并且domain_intel.py脚本存在且有读取和执行权限。
  3. 检查网络连通性:尝试ping 8.8.8.8telnet crt.sh 443(或nc -zv crt.sh 443)。工具需要访问外部网络。
  4. 查看详细错误:在命令前加上PYTHONPATH或直接使用python3 -u运行,有时能捕获到更早的错误信息。或者尝试在Python交互环境中导入模块,看是否有语法或导入错误。

5.2 WHOIS查询失败或返回乱码

问题现象whois命令返回空JSON、错误信息,或是一堆无法识别的字符。

可能原因与解决

  • 不支持的TLD:查询了一个工具内置映射表中没有的顶级域。解决方法是手动查找该TLD的WHOIS服务器,并考虑向项目提交Issue或PR。
  • 查询被限制:你的IP地址因为短时间内查询过多被WHOIS服务器暂时封禁。症状是连接被拒绝或返回“Rate limit exceeded”等信息。唯一的办法就是等待(通常是几小时到一天)。未来使用务必添加延迟。
  • 编码问题:WHOIS服务器返回了非UTF-8编码的文本,而工具解码失败。可以尝试修改脚本,在解析WHOIS响应时,使用chardet库(但这会引入依赖)或尝试多种常见编码(如‘utf-8‘, ’iso-8859-1‘, ’gbk‘)进行解码。
  • 输出格式已更新:注册局更改了WHOIS输出模板,导致工具的解析器无法匹配到关键字段。需要根据新的输出格式更新解析器的正则表达式规则。

5.3 SSL证书检查连接超时

问题现象ssl命令卡住很久,最后报超时错误。

排查与解决

  1. 确认域名和端口:首先用nslookup example.com确认域名能解析,再用telnet example.com 443确认443端口开放。如果端口不通,目标可能没有启用HTTPS。
  2. 检查本地防火墙/代理:如果你在公司网络或使用了代理,可能需要配置Python使用代理,或者防火墙阻止了出站443连接。
  3. 服务器SSL配置错误:极少数情况下,服务器的SSL配置存在严重问题,导致TLS握手无法完成。可以尝试用openssl s_client -connect example.com:443来诊断。
  4. SNI问题:对于使用虚拟主机的服务器,客户端需要在握手时发送Server Name Indication(SNI)。Python的ssl库默认会处理。但如果目标服务器非常老旧或不标准,可能需要手动设置ssl.create_connectionssl.SSLContext

5.4 子域名发现结果不完整或过时

问题现象subdomains命令返回的结果很少,或者发现不了已知存在的子域名。

原因分析

  1. 证书透明度日志的局限性:只有使用了公开信任的SSL证书的子域名才会被记录。如果子域名使用自签名证书、过期证书,或者根本不用HTTPS,就不会出现在CT日志中。
  2. crt.sh查询限制crt.sh的公开查询接口可能有结果数量限制或查询深度限制。
  3. 网络问题:查询crt.sh的请求失败或被中间网络干扰。

解决方案

  • 结合其他方法:子域名发现应该是一个多源聚合的过程。除了CT日志,还应考虑:
    • DNS字典爆破:使用大的子域名字典进行DNS解析尝试。
    • 搜索引擎语法:使用site:example.com -www等语法从搜索引擎查找。
    • 公开数据集:利用像VirusTotal、SecurityTrails这样的平台(通常需要API密钥)。
  • 验证与去重:将CT日志发现的结果作为输入,再用dns命令或专门的工具(如massdns)进行解析验证,剔除无法解析的“僵尸”记录。

5.5 批量分析时内存或性能问题

问题现象:分析几十上百个域名时,脚本运行缓慢,甚至内存占用过高。

优化建议

  1. 限制并发数:如果实现了并发,不要一次性开启过多线程(如超过50个)。这会导致网络拥塞,也更容易触发外部服务的速率限制。建议控制在5-10个并发。
  2. 流式处理输出:不要等所有域名都检查完再一次性输出巨大的JSON。可以每完成一个域名,就立即将其结果以JSON Lines(每行一个JSON对象)的格式输出到文件或标准输出。这样既方便实时查看,也避免内存堆积。
  3. 选择性检查:使用--checks参数只运行必要的检查。例如,如果只关心域名是否被注册,就只运行available检查,它内部会按需调用其他模块,比运行全套检查快得多。
  4. 超时控制:为每一个网络请求(DNS、WHOIS、SSL连接)设置合理的超时时间(如DNS 5秒,WHOIS 10秒,SSL 10秒)。避免因为一两个“卡住”的域名拖慢整个批量任务。

这个工具的精妙之处在于其克制与专注。它没有试图成为一个全能的网络侦察套件,而是将“被动”、“零依赖”、“结构化输出”这几个点做到了极致。对于快速信息收集、自动化集成和教育学习来说,它是一个非常优雅的解决方案。把它放进你的工具箱,下次需要快速了解一个域名时,你会感谢它的简洁与高效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 11:01:53

3步掌握NSC_BUILDER:彻底解决你的Switch游戏管理难题

3步掌握NSC_BUILDER:彻底解决你的Switch游戏管理难题 【免费下载链接】NSC_BUILDER Nintendo Switch Cleaner and Builder. A batchfile, python and html script based in hacbuild and Nuts python libraries. Designed initially to erase titlerights encryptio…

作者头像 李华
网站建设 2026/5/10 11:00:53

PHP接入Bing AI:非官方库实现聊天与图像生成功能详解

1. 项目概述:一个让PHP应用接入Bing AI的“瑞士军刀” 如果你正在用PHP做项目,又眼馋ChatGPT和DALL-E这类AI能力,但不想去折腾复杂的OpenAI API或者被网络环境卡脖子,那今天聊的这个工具可能正对你的胃口。 maximerenou/php-bin…

作者头像 李华
网站建设 2026/5/10 11:00:52

AI Agent技能集:自动化社交媒体多平台发布的技术实现与实战

1. 项目概述:一个为AI编码助手打造的跨平台社交媒体自动化发布技能集 如果你和我一样,是个独立开发者、内容创作者或者小团队的运营,每天最头疼的事情之一,可能就是“多平台发布”。一个产品更新、一篇技术文章,需要同…

作者头像 李华
网站建设 2026/5/10 10:55:34

NR/5G - 测量、GAP与SFTD:从事件触发到精准切换的无线资源管理

1. 5G网络中的测量机制:从事件触发到精准决策 想象一下你正用手机看高清视频,从市中心走到郊区。这时候手机会自动从5G切换到4G网络,整个过程几乎无感。背后的核心技术就是5G NR网络中的测量机制。作为终端设备(UE)&am…

作者头像 李华