如何通过PHP了解IP的域名?
我已使用此代码
<?php
$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
echo $hostname;
?>
但它无法正常工作。例如:
gethostbyaddr(62.75.138.253);
域名是earthwar.de,但正确答案是german-proxy.de
请帮忙。
答案 0 :(得分:3)
单个IP地址可以托管可能无限数量的域。 gethostbyaddr
返回的域将从该IP的PTR DNS记录中提供域名。反向DNS记录(PTR)将IP地址映射到一个或多个域名。
就IP地址域提供智能的一家公司是domaintools.com。您可以支付他们已经收获的信息。如果域名不在PTR记录中,那么您可以通过尝试将域名解析为其IP地址并保留记录来了解IP地址上的域名的唯一方法。 AFIK没有其他办法。
请参阅Reverse DNS Lookup和Domain tools reverse IP lookup
来自域工具的反向IP查找的数据全部基于他们的挖掘,收集和研究。
答案 1 :(得分:2)
你的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
>
所以这是一个很好的例子。事实是:不管你能不能做什么,老兄!
答案 2 :(得分:2)
可以有许多名称 - &gt; IP映射,但只有 ONE IP-&gt;名称映射。当您执行host-&gt; ip-&gt;主机查找时,最终会得到完全不同的主机名并不罕见。您无法确定用户指定的主机名,除非他们使用的协议将该主机名与请求一起传输,例如http 1.1。大多数协议完全不依赖IP地址,也不需要/关心主机名。
答案 3 :(得分:1)
您无法信任 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查找。走路是漫长的路,但是当我说这是一个有趣的时候,你可以信任我。