【问题标题】:Reverse IP domain check script [duplicate]反向IP域检查脚本[重复]
【发布时间】:2016-07-21 21:25:58
【问题描述】:

我想知道是否有一种方法可以构建一个自动化脚本(不管它是 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);

【问题讨论】:

  • 不,我认为一般来说不可能。

标签: php bash perl dns


【解决方案1】:

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

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

【讨论】:

  • 所以一个可行的解决方案是在我手动发布的链接上使用该工具......这需要我很长时间才能获得一个大列表但是......无论如何,谢谢。我想听听其他意见...
  • 您可以使用cURL 访问该站点,然后抓取结果。
  • @Borodin 既然他问到用 PHP 做这件事,我建议他使用 PHP 的 curl_XXX 函数。
  • 但实际上这只是一个笼统的建议,他使用某种自动下载网页并解析结果的方法。
  • 是的,它是 libcurl。
【解决方案2】:

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

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

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

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

因此,除非您特别请求 gertrudeisarealllyniceguy.banana,否则您永远不会知道它的存在。因此,您可以了解该网络服务器上托管的每个网站(除了破解它)的唯一可能方法是尝试每个可能的域名,这将花费很长时间(也许eons

当前拥有此信息的网站使用来自网络爬虫的数据,它们只需查找具有域名和 IP 地址的表的列。

【讨论】:

    【解决方案3】:

    我是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。

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 2016-06-11
      • 2011-04-07
      • 2021-03-28
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多