我如何知道域名的IP通过PHP


How I can know the Domain for an IP by PHP?

如何通过PHP知道IP的域?

我已经使用了这个代码

<?php
  $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
  echo $hostname;
?>

但是它不能正常工作。例如:

gethostbyaddr(62.75.138.253);

域名是earthwar.de,但正确答案是german-proxy.de

请帮。

单个IP地址可以承载无限数量的域。gethostbyaddr返回的域将给出该IP的PTR DNS记录中的域名。反向DNS记录(PTR)将IP地址映射到一个或多个域名。

domaintools.com就是这样一家提供IP地址域情报的公司。你可以为他们收集到的信息付费。如果域名不在PTR记录中,那么您可以知道IP地址上有哪些域的唯一方法是尝试将域名解析为其IP地址并保存记录。恐怕没有别的办法了。

请参阅反向DNS查找和域工具反向IP查找

域名工具上反向IP查找的数据均基于其挖掘、收集和研究。

可以有多个name->IP映射,但只有一个 IP->名称映射。当您执行host->ip->host查找时,通常会得到一个完全不同的主机名。你无法确定用户指定的主机名,除非他们使用的协议将该主机名与请求一起传输,例如http 1.1。

你的PHP是正确的,earthwar.de是正确的答案

eugen@lucidhome:~$ nslookup
> set q=ptr
> 62.75.138.253
Server:     192.168.232.1
Address:    192.168.232.1#53
Non-authoritative answer:
253.138.75.62.in-addr.arpa  name = earthwar.de.
Authoritative answers can be found from:
> 

当然,这并不意味着,其他名称(如german-proxy.de)不指向相同的地址,但没有办法找到所有的。

更新:

eugen@lucidhome:~$ nslookup 
> set q=a
> german-proxy.de.     
Server:     192.168.232.1
Address:    192.168.232.1#53
Non-authoritative answer:
Name:   german-proxy.de
Address: 62.75.138.253
> earthwar.de.
Server:     192.168.232.1
Address:    192.168.232.1#53
Non-authoritative answer:
Name:   earthwar.de
Address: 91.143.85.129
> 

是一个很好的例子。事实是:你对此无能为力,老兄!

您不能信任gethostbyaddr返回的名称。具有特定IP地址权限的DNS服务器可以返回任何主机名。

通常,管理员将DNS服务器设置为使用正确的主机名进行应答,但恶意用户可能将其DNS服务器配置为使用错误的主机名进行应答。当您在gethostbyaddr返回的主机名上调用gethostbyname时,您可以避免落入这个陷阱,并确保名称解析为原始IP地址。

但是还有更多…有时一个主机名可以映射到多个IP地址。

var_dump(gethostbynamel('google.com')); 

返回
array(6) {
   [0]=>
        string(14) "173.194.69.104"
   [1]=>
        string(14) "173.194.69.147"
   [2]=>
        string(14) "173.194.69.105"
   [3]=>
        string(14) "173.194.69.106"
   [4]=>
        string(14) "173.194.69.103"
   [5]=>
        string(13) "173.194.69.99"
}

总之,你需要学习DNS挖掘和反向DNS查找。这是一条很长的路要走,但你可以相信我,当我说这是一个有趣的过程。