Как я могу узнать домен для IP через PHP?
Я использовал этот код
<?php $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']); echo $hostname; ?>
Но это работает неправильно. Например:
gethostbyaddr(62.75.138.253);
доменное имя earthwar.de, но правильный ответ – german-proxy.de
Пожалуйста помоги.
Один IP-адрес может содержать потенциально неограниченное количество доменов. Домены, возвращаемые gethostbyaddr
будут gethostbyaddr
доменные имена из записей PTR DNS для этого IP-адреса. Обратная запись DNS (PTR) отображает IP-адреса для одного или нескольких доменных имен.
Одной из таких компаний, которая предоставляет информацию о доменах по IP-адресам, является domaintools.com. Вы можете заплатить за такую информацию, которую они собрали. Если имя домена отсутствует в записи PTR, то единственным способом узнать, какие домены находятся на IP-адресе, является попытка разрешить имена доменов на их IP-адреса и вести учет. AFIK нет другого пути.
См. « Обратный поиск DNS» и инструменты «Домен» обратного IP-поиска
Данные обратного IP-поиска по инструментам домена основаны на их добыче, сборе и исследованиях.
Могут быть МНОГИЕ имена -> IP-сопоставления, но только ONE IP-> name mapping. Это не редкость, когда вы используете хост-хост-> ip-> host lookups. Вы не можете определить, какое имя хоста указано пользователем, если только протокол, который они используют, не передает это имя хоста вместе с запросом, например, http 1.1. Большинство протоколов работают исключительно с IP-адреса и не нуждаются / заботятся о именах хостов.
Ваш 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 . DNS-сервер с полномочиями на определенный IP-адрес может вообще вернуть любое имя хоста.
Обычно администраторы настраивают 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-поиске. Это долгий путь, чтобы идти, но вы можете доверять мне, когда я говорю, что это интересно.