Как я могу узнать домен для IP по PHP? - PullRequest
1 голос
/ 30 декабря 2011

Как я могу узнать домен для IP по PHP?

Я использовал этот код

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

Но это не работает правильно. Например:

gethostbyaddr(62.75.138.253);

доменное имя earthwar.de, но правильный ответ - german-proxy.de

Пожалуйста, помогите.

Ответы [ 4 ]

3 голосов
/ 30 декабря 2011

Один IP-адрес может содержать потенциально неограниченное количество доменов.Домены, возвращенные gethostbyaddr, дадут доменные имена из записей DNS PTR для этого IP.Обратная запись DNS (PTR) сопоставляет IP-адреса одному или нескольким доменным именам.

Одной из таких компаний, предоставляющих сведения о доменах по IP-адресам, является domaintools.com.Вы можете заплатить за такую ​​информацию, которую они собрали.Если доменное имя отсутствует в записи PTR, то единственный способ узнать, какие домены находятся на IP-адресе, - это попытаться преобразовать доменные имена в их IP-адреса и вести записи.AFIK другого пути нет.

См. Обратный поиск DNS и Инструменты домена обратного просмотра IP

Данные обратного поиска IP на доменеВсе инструменты основаны на их добыче, сборе и исследованиях.

2 голосов
/ 30 декабря 2011

Может быть МНОГИЕ сопоставления имен-> IP, но только ОДИН IP-> сопоставление имен.Нет ничего необычного в том, чтобы получить совершенно другое имя хоста, когда вы выполняете поиск host-> ip-> host.Вы не можете определить, какое имя хоста указал пользователь, если только протокол, который он использует, не передает это имя хоста вместе с запросом, например http 1.1.Большинство протоколов работают исключительно с IP-адреса и не нуждаются / не заботятся об именах хостов.

2 голосов
/ 30 декабря 2011

Ваш 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
> 

, так что это хороший пример.Факт в том, что нет, ничто не может с этим поделать, чувак!

1 голос
/ 03 января 2012

Нельзя доверять имени, возвращенному 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.Это долгий путь, но вы можете доверять мне, когда я говорю, что он интересный.

...