我正在尝试提高对 DNS 系统的理解,但对于 domaintools.com 如何解析与 IP 地址关联的所有 DN 感到困惑。
在玩了 dig 之后,我陷入了困境。
域上的示例dressupgames.com
使用 dig::
$ dig +short dressupgames.com
173.231.156.28
$ dig +short -x 173.231.156.28
28.24/29.156.231.173.in-addr.arpa.
$ dig +short 28.24/29.156.231.173.in-addr.arpa
67.215.65.132
$ dig +short -x 67.215.65.132
hit-nxdomain.opendns.com.
$ dig +short hit-nxdomain.opendns.com
67.215.65.132
推测 173.231.156.28 是 67.215.65.132 的别名(?)。现在使用 DomainTools Web 界面http://www.domaintools.com/research/reverse-ip/我得到了 129 个结果的承诺。
如何使用命令行工具找到这些结果?
答案1
DNS 不包含自动 IP 到主机名查找机制。它确实有 PTR 记录,但这些记录是手动配置的,并且在大多数情况下与 A 记录不对应。像 domaintools.com 这样的网站只是拥有一个包含他们发现的所有正向映射的大型数据库,并且在查找 IP 时会查询该数据库。结果不能保证完整或最新。
答案2
我是host.io,它还会显示在同一 IP 地址上托管的所有域的列表(以及链接到该域的域的列表等)。例如,以下是与 stackoverflow.com 在同一 IP 上托管的域的列表:https://host.io/stackoverflow.com
正如您所发现的,获取单个域的 IP 地址只是解决方案的很小一部分。没有单一的命令或脚本可以做到这一点 - 您需要构建自己的域到 IP 地址的数据库,这正是 DomainTools、我们和其他类似公司所做的。
首先需要获取(或创建)所有可用域名的列表。目前大约有 2.5 亿个域名。下一步是将所有这些域名解析为 IP 地址。然后,您需要将所有这些域名与 IP 对存储在数据库中,然后您可以查询以获取同一 IP 上的所有域名的列表。然后,您需要定期执行此操作以确保它保持最新状态。
为了给出一个完整的例子,让我们创建一个包含 4 个域的文件并将它们解析为 IP 地址:
$ cat domains.txt
facebook.com
fb.com
stackoverflow.com
stackexchange.com
# Let's resolve the domains to IPs with dig - could use nslookup or similar
$ cat domains.txt | xargs -I% bash -c "dig +short % | tail -n1" > ips.txt
31.13.76.68
31.13.76.68
151.101.129.69
151.101.193.69
# Let's combine the domains and IPs using paste
$ paste domains.txt ips.txt > combined.tsv
$ cat combined.tsv
facebook.com 31.13.76.68
fb.com 31.13.76.68
stackoverflow.com 151.101.129.69
stackexchange.com 151.101.129.69
# Let's create a DB table and import the data, and write a query
# to find any domains in our dataset that are hosted on the same
# domain as stackoverflow.com
$ psql $DB_URL
=> create table details (domain text, ip text);
=> \copy details from ~/combined.tsv;
=> select domain from details where ip = (select ip from details where domain = 'stackoverflow.com');
domain
-------------------
stackoverflow.com
stackexchange.com
(2 rows)