反向IP域检查脚本


Reverse IP domain check script

我想知道是否有一种方法可以构建一个自动化脚本(无论是perl、bash还是php)来找出某个ip上托管的域。

我正在尝试在yougetsignal.com.上执行反向IP域检查之类的操作

我的一个朋友帮我做了这件事,但它没有找到给定服务器地址列表的托管域;相反,它只获取IP地址的主机。

这是我写的的PHP代码

<?php
$file    = fopen("71", "r");
$ip_file = fopen('iphosts', 'w');
$ip_add  = fopen('ip_add', 'w');
$i = 1;
while ( ! feof($file) ) {
    $host = fgets($file);
    $host = rtrim($host);
    echo "'n";
    echo "Connecting..." . $host;
    echo "'n";
    $host_name = gethostbyaddr( $host );
    if ( !empty( $host_name ) && $host != $host_name ) {
        fwrite($ip_file, $host_name."'n");
    } else {
        fwrite($ip_add, $host_name."'n");
    }
    echo " Done 'n";
    $i++;
}
fclose($file);
fclose($ip_file);
fclose($ip_add);

exit(0);

这通常是不可能的。托管虚拟域的网站通常不提供列出其托管的所有域的反向DNS。反向DNS只指向它们的服务器名称。

你链接到的网站可能是通过像搜索引擎一样在网上爬行来获取信息的。但是,它并没有为页面中的所有单词建立索引,而是简单地记录它找到的所有名称到地址的映射,然后创建一个反向索引,返回映射到同一地址的所有名称。

这在脚本中是不可能做到的。让我举一个例子来说明。

您的服务器位于12.34.56.78,该服务器托管了以下(唯一)网站。

www.example.com
example.com
www.example.org
bob.example.net 
gertrudeisarealllyniceguy.banana 

大多数Web服务器的操作方式是,它们将为与传入的Host标头匹配的网站提供服务。所以你可以幸运地发现www.example.com的存在,你可以推断出example.com。CCD_ 3更有可能被遗漏。

所以,除非你特别要求gertrudeisarealllyniceguy.banana,否则你永远不会知道它的存在。因此,你唯一可能知道该网络服务器上托管的每个网站的方法(除了黑客攻击)是尝试每一个可能的域名,这将需要很长时间(可能是亿万年)

目前拥有这些信息的网站使用来自网络爬网程序的数据,他们只需查找表中具有域名和IP地址的列。

我是host.io的创建者,它做了类似的事情,向您显示托管在同一IP地址上的所有域的列表(以及链接到该域的域的列表等)。例如,以下是与stackoverflow.com托管在同一IP上的域列表:https://host.io/stackoverflow.com

正如您所发现的,获取单个域的IP地址只是解决方案的一小部分。没有一个单独的命令或脚本可以编写,你需要建立自己的域数据库到IP地址。

首先需要获得(或创建)所有可用域名的列表。目前大约有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)

这就是你可以建立自己的方法,或者你可以让别人做艰苦的工作,并使用他们的数据。我们就是这样一个提供商,但其他提供商也存在,比如yougetsignal和domaintools。