怎么通过ip反查域名

打开一个网站,通过你看到的反查是域名。但服务器只认 IP。域名把域名解析成 IP 是通过 DNS 的正向查询,反过来拿 IP 找域名,反查叫反向查询。域名这事儿听起来简单,通过做起来处处是反查坑。

先说最直接的域名办法:PTR 记录。IP 地址在 DNS 里有专门的通过逆向解析区域,格式是反查把 IP 段倒过来加 .in-addr.arpa。比如查 8.8.8.8,域名就查 8.8.8.8.in-addr.arpa 的通过 PTR 记录。Linux 下用 dig -x 8.8.8.8 或者 nslookup 8.8.8.8 就能看到结果。反查Google 的域名 DNS 会返回 dns.google。

但 PTR 记录有个致命问题:它不权威。IP 的所有者可以随便设 PTR,设成 www.baidu.com 都行。而且大量 IP 根本没有 PTR 记录——尤其是共享主机和云服务器。我试过查一个阿里云 ECS 的 IP,PTR 是空的。所以 PTR 只能当线索,不能当证据。

更实用的路子是查历史 DNS 记录。很多网站做被动 DNS 收集,把每个域名解析过的 IP 存下来。SecurityTrails、VirusTotal、ViewDNS 都提供这类查询。你把 IP 丢进去,能看到历史上哪些域名指向过它。这个方法比 PTR 靠谱得多,因为数据来自真实的 DNS 查询日志,不是 IP 所有者自己填的。

具体操作:打开 ViewDNS 的 IP 反查页面,输入 IP,它会列出同一台服务器上托管的所有域名。我拿一个共享主机的 IP 试过,出来两百多个域名,从企业官网到个人博客都有。这时候你就能判断:这个 IP 是共享的还是独立的。如果只解析出一个域名,大概率是独立服务器;如果几百个,那就是虚拟主机。

还有一个容易被忽略的渠道:SSL 证书。每个 HTTPS 网站都有证书,证书里包含域名信息。Censys 和 Shodan 会扫描全网 IP 的证书,你搜一个 IP,能看到它上面跑过哪些域名的证书。就算域名已经换了 IP,证书历史记录里还留着痕迹。我查过一个过期 IP,PTR 没有,被动 DNS 只显示一个域名,但 Censys 的证书记录里翻出了另外三个——都是同一个站长的项目。

反向 IP 查询服务本身也有坑。免费接口通常限流,查几次就 429。数据更新频率参差不齐,有的缓存几个月前的记录。还有的会把 CDN 的 IP 当成源站 IP 返回,结果你查出来一堆无关域名——因为 Cloudflare 的 IP 上挂着几百万个网站。遇到这种情况,先确认 IP 是不是 CDN 节点。用 whois 看 IP 的归属,ASN 显示 Cloudflare、Akamai、Fastly 的,直接放弃反查,没意义。

命令行工具组合用效率更高。先 dig -x 拿 PTR,再 whois 看归属,然后拿 IP 去 curl https://api.hackertarget.com/reverseiplookup/?q=IP 拉域名列表。HackerTarget 的免费接口每天 100 次,够个人用。返回结果一行一个域名,直接丢进脚本批量验证哪些还活着。

最后说个实际案例。朋友让我查一个钓鱼网站的 IP,想找幕后的人。IP 的 PTR 是空的,被动 DNS 显示三个域名,两个已经打不开。第三个域名注册邮箱是 Gmail,但 SSL 证书里有一个子域名没隐藏——admin.xxx.com。访问那个子域名,是一个没设密码的 WordPress 后台。从后台的用户列表里拿到了用户名,和域名注册邮箱的前缀一致。IP 反查本身没直接给出答案,但它是整条线索链的第一环。

所以别指望一个工具解决问题。PTR 给方向,被动 DNS 给范围,SSL 证书给细节,whois 给归属。几个数据源交叉验证,才能拼出完整的图。单靠任何一个,都可能被误导。