反向 DNS 查询

reverse DNS look up

反向 DNS 查找如何工作?

例如我 运行 dig youtube.com 得到 A 记录:172.217.0.46

如果我使用此 IP 进行反向 dns 查找,我会得到

172.217.0.46 lga15s43-in-f14.1e100.net

lga15s43-in-f14.1e100.net 确实有这个 A 记录 (172.217.0.46),但这不是我想从反向 DNS 查找中得到的。我想从 IP 地址中获取 youtube.com

有没有办法获取一个IP地址关联的所有域名? 我正在寻找 Linux 系统的解决方案。

你不能。 lga15s43-in-f14.1e100.net 是与该 IP 地址关联的 PTR 记录,这就是 DNS 会告诉您的全部内容。毕竟,如果我现在购买一个新的随机域,并将它的一些随机子域指向 IP 172.217.0.46,您不会期望立即被告知我的新创建。

How does reverse DNS look up work?

与转发 DNS 的方式相同,但使用不同的记录类型。

当您执行 dig -x 172.217.0.46 时,实际上就像执行 dig PTR 46.0.217.172.in-addr.arpa 一样,所以您只是在查询,甚至不知道它是 DNS 树的不同分支。 in-addr.arpa 很久以前就作为 IPv4 DNS 授权的起点成立。然后将 IP 地址块委托给 IANA,然后从那里委托给现有的 5 个 RIR,这些 RIR 本身使用相应的 IP 块将它们委托给 LIR。

它对 IPv6 的工作方式相同,但在另一个分支下。

I want to get youtube.com from the IP address.

您可能想要它,但为什么呢? "branches"(正向和反向)都没有保持同步的操作需求,事实上永远不会,因为它们由不同的公司管理。

一切从 IANA 开始,然后:

  • 对于名称(前向分支),TLD 被委托给注册管理机构,然后注册管理机构将名称委托给注册人为其域选择的任何名称服务器
  • 对于 IP 地址(反向分支),space 被委托给 RIR,然后是 LIR,然后有时托管公司或拥有自己 IP 块的最终用户。

想象一个相对中间的网络托管公司。它可能控制给定的 IP 地址块,但共享虚拟主机:客户可以在那里托管他们的网站,托管公司为托管的所有网站使用多个 IP。 同步 PTR 记录将是一项艰巨的任务,并且收益为 0:除了电子邮件之外,PTR 记录的使用率并不高。此外,即使技术上可行,一个 PTR 记录为给定 IP 地址提供多个名称的情况也可能无法被许多应用程序正确处理。

RIR 数据为 public。您可以下载每个 IPv4 和 IPv6 块的所有者列表 (LIR) 并在那里进行搜索。它可能不会准确地为您提供您正在寻找的名字。您还可以使用 whois 协议(不使用 DNS 但转到相同的权威来源)以交互方式查询数据。

如果我们再以您的IP地址为例:

$ whois 172.217.0.46

#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/resources/registry/whois/tou/
#
# If you see inaccuracies in the results, please report at
# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
#
# Copyright 1997-2019, American Registry for Internet Numbers, Ltd.
#


NetRange:       172.217.0.0 - 172.217.255.255
CIDR:           172.217.0.0/16
NetName:        GOOGLE
NetHandle:      NET-172-217-0-0-1
Parent:         NET172 (NET-172-0-0-0-0)
NetType:        Direct Allocation
OriginAS:       AS15169
Organization:   Google LLC (GOGL)
RegDate:        2012-04-16
Updated:        2012-04-16
Ref:            https://rdap.arin.net/registry/ip/172.217.0.0



OrgName:        Google LLC
OrgId:          GOGL
Address:        1600 Amphitheatre Parkway
City:           Mountain View
StateProv:      CA
PostalCode:     94043
Country:        US
RegDate:        2000-03-30
Updated:        2018-10-24

所以你可以看到这个 IP 地址 "belongs to" Google 但你不能从中得出什么网站 运行 在它之上。

Is there a way to get all domain names associated with an IP address? I am looking for a solution for Linux system.

是的,有一种方法,很多公司都在线为您提供这项服务,但通常不是免费的。

他们是怎么做到的:

  • 他们从域列表开始 names/hostnames:构建他们可以使用开放区域文件(所有 gTLD)、在搜索引擎中进行查询、解析电子邮件 headers、使用证书透明度日志、等等
  • 他们解析这些名称,因此他们获得关联的 IP 地址
  • 他们存储这个映射
  • 完成后,"trivial" 在他们的数据库中执行相反的操作。

所以它在技术上很容易,只是处理数据量大而乏味。 最重要的是,您需要记住任何名称->IP 映射都可以随时更改。因此,这个数据库可能在创建时就已经过时了,所以他们当然会定期重做正向解析。