依靠IP地址反查域名,技术上存在两种完全不同的实现方式,很多人把两者混在一起,越梳理越混乱。一种是反向DNS查询,另一种叫反向IP查询。名称看着相近,底层原理差别很大。
反向DNS查询,查询的是PTR记录。常规DNS是域名解析到IP,输入example.com,DNS返回93.184.216.34。反向DNS反过来,输入IP,查询该IP对应的主机名。主机名可以是域名,也可能是类似93-184-216-34.static.example.net这类默认主机名。查询PTR的命令,Windows、Linux都能用nslookup加IP,或者dig -x 目标IP。但PTR记录不是强制配置,大量IP没有设置PTR,查询返回NXDOMAIN,不代表IP没有绑定域名,只是管理员没有配置反向解析。单个IP只能对应一条PTR记录,如果IP承载五十个网站,PTR最多指向其中一个,甚至指向和网站无关的名称。PTR反查域名查到结果属于运气,查不到才是常态。

反向IP查询是另一套逻辑。它不访问DNS系统,查询独立数据库。数据库记录历史解析记录,哪些域名曾经解析到该IP,或是当前绑定到这个IP。共享主机场景很适合这类查询,拿到一个IP,想查看上面部署的全部站点,使用反向IP工具,能列出一串域名。这些域名共用同一台服务器,有可能属于同一主体站群,也可能是虚拟主机上不同用户的站点。做SEO的从业者用它排查对手站群,安全人员依靠它查找同一IP下其他可疑站点。ViewDNS.info、YouGetSignal、DNSlytics这类网站提供免费反向IP查询,填入IP提交就能查看结果。数据源一般来自DNS历史记录、证书透明日志、爬虫抓取数据。返回域名列表不一定百分百准确,部分域名早已不再解析到这个IP,只是历史记录没有清理。
还有一种思路,借助SSL证书反查域名。HTTPS网站证书会包含域名信息,证书透明日志(Certificate Transparency Logs)对外公开,任何人都可以检索。在Censys或者crt.sh输入IP检索,有时能找到该IP曾经部署证书对应的域名,间接拿到绑定域名。共享主机场景这个方法效果很好,域名申请证书会在CT日志留存记录,就算后续解析变更,历史记录依旧保存。
命令行环境也可以做类似检索。dnsrecon工具带有反向查询选项,主要用来查询PTR记录。更实用的是搜索引擎语法,Google检索ip:93.184.216.34,Shodan、Censys这类网络空间搜索引擎,返回IP开放服务和关联域名。Shodan免费账号就能完成基础IP查询,结果经常附带域名信息。安全人员排查可疑IP,Shodan比普通反向IP网站能拿到更多信息,比如IP运行的Web服务、SSL证书签发方、关联域名。
但有一类场景会让全部反查手段失效:CDN。目标站点使用Cloudflare或者国内各类CDN,查到的IP是CDN节点IP,不是源站IP。单个CDN节点绑定成千上万个域名,反向查询返回大量无关站点,没法从中筛选目标域名。碰到CDN,IP反查域名基本行不通,需要更换思路,从域名侧查询源站,比如检索DNS历史、子域名、邮件服务器IP,部分场景可以绕过CDN获取真实源站IP。
还有一个常见误区,IP反查得到域名列表,不代表域名归属同一所有人。共享虚拟主机环境,单个IP挂载几百个互不相关的企业站、个人博客,属于常态。反查结果仅代表域名共用服务器,不存在业务关联。反过来,如果IP只绑定单一域名,域名看起来像临时站点,这个IP大概率是独立服务器或者VPS,绑定域名就是它的主要业务站点。
实际操作建议多种方式交叉验证。先用nslookup查询PTR,看是否存在反向解析记录。没有结果,使用ViewDNS或者YouGetSignal执行反向IP查询,查看历史绑定关系。站点启用HTTPS,前往crt.sh检索IP段,从证书日志寻找线索。最后用Shodan、Censys补充网络层面信息。一套流程下来,拼凑完整信息。单一工具结果都存在局限,多渠道对照才更可靠。