[英]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
请帮忙。
您的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
>
所以这是一个很好的例子。 事实是:伙计,还有一个可以做的事!
可以有许多名称-> IP映射,但只有一个 IP->名称映射。 当执行host-> ip-> host查找时,以完全不同的主机名结尾是很平常的。 您无法确定用户指定的主机名,除非他们使用的协议将该主机名与请求一起发送,例如http 1.1。 大多数协议仅靠IP地址工作,不需要/关心主机名。
您不能相信gethostbyaddr返回的名称。 具有特定IP地址权限的DNS服务器完全可以返回任何主机名。
通常,管理员将DNS服务器设置为使用正确的主机名进行答复,但是恶意用户可能将其DNS服务器配置为使用错误的主机名进行答复。 您可避免落入这个陷阱,当你调用的主机名的gethostbyname从gethostbyaddr返回,并确保名称解析为原来的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查找。 那是一条漫长的路,但是当我说这是一条有趣的路时,您可以相信我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.