Скрипт whois не получает некоторые домены

Я пытаюсь получить данные whois, используя эту функцию:

function getDomain()
$domain = 'stackoverflow.com';
$whois = '';
$connection = @fsockopen('whois.internic.net', 43);
if ($connection) {
    @fputs($connection, $domain ."\r\n");
    while (!feof($connection)) {
        $whois .= @fgets($connection, 128);
    }
}
fclose($connection);
return $whois;
}

Он отлично работает для некоторых доменов, но когда я пытаюсь использовать «apple.com», «cnn.com» или «google.com», получаю следующее:

APPLE.COM.ZON.COM
APPLE.COM.WWW.ZON.COM
APPLE.COM.WWW.BEYONDWHOIS.COM
APPLE.COM.WAS.PWNED.BY.M1CROSOFT.COM
APPLE.COM.MORE.INFO.AT.WWW.BEYONDWHOIS.COM
APPLE.COM.IS.OWN3D.BY.NAKEDJER.COM
APPLE.COM.IS.0WN3D.BY.GULLI.COM
APPLE.COM.DENIS.DA.DOIDE.DA.PIEM.UNIX-BG.COM
APPLE.COM.BEYONDWHOIS.COM
APPLE.COM.AT.WWW.BEYONDWHOIS.COM
APPLE.COM

person cmltkt    schedule 23.03.2013    source источник
comment
Слишком много доменов или недостаточно? Ваш вопрос не ясен.   -  person Lightness Races in Orbit    schedule 23.03.2013
comment
Я не понимаю, почему его вопрос неясен, я понял, о чем он спрашивал, поэтому мой ответ ниже.   -  person shawty    schedule 29.05.2013
comment
Из названия вопроса я бы предположил, что ОП знает, что доменов, начинающихся с apple.com, больше, чем возвращается запросом.   -  person Stevetech    schedule 06.01.2018


Ответы (2)


Ваш скрипт ТОЛЬКО запросы

whois.internic.net

помните, что по всему миру существует несколько провайдеров доменов/IP.

Полноценные инструменты, такие как те, что представлены в большинстве дистрибутивов Linux, знают, что нужно попробовать несколько разных серверов, а затем изучить данные со всех них, чтобы определить, какой сервер является авторитетным.

Насколько я помню, есть 5 всемирных авторитетных зон, внутренняя у вас уже есть, плюс:

whois.afrinic.net
whois.lacnic.net
whois.arin.net
whois.apnic.net

Ripe (центральный реестр, который мы используем здесь, в Европе) тоже есть, но это не то, что вы ожидаете, 'whois.ripe.net', и у меня нет времени искать его прямо сейчас.

Теперь, помимо того, что я сказал выше, вы можете рассмотреть следующее. Большинство органов whois ограничивают (или даже блокируют) ваш трафик, если сочтут, что вы делаете слишком много запросов в течение 24 часов, вместо этого вы можете захотеть войти на ftp-сайт любого из вышеперечисленных провайдеров и загрузить различные биты. базы данных, а затем написать (или найти) собственный скрипт для их обработки.

В настоящее время я делаю это с одним из моих собственных серверов, который подключается с помощью следующего сценария оболочки (один раз каждые 24 часа):

#!/bin/bash
rm -f delegated-afrinic-latest
rm -f delegated-lacnic-latest
rm -f delegated-arin-latest
rm -f delegated-apnic-latest
rm -f delegated-ripencc-latest
rm -f ripe.db.inetnum
rm -f apnic.db.inetnum
rm -f ripe.db.inetnum.gz
rm -f apnic.db.inetnum.gz
wget ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
wget ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest
wget ftp://ftp.arin.net/pub/stats/arin/delegated-arin-latest
wget ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
wget ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest
wget ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.inetnum.gz
ftp -n -v ftp.apnic.net <<END
user anonymous [email protected]
binary
passive
get /apnic/whois-data/APNIC/split/apnic.db.inetnum.gz apnic.db.inetnum.gz
bye
END
gunzip ripe.db.inetnum
gunzip apnic.db.inetnum

Затем у меня есть специально написанная программа, которая анализирует файлы в пользовательскую структуру базы данных, из которой мои серверы затем выполняют свои запросы.

Поскольку все серверы отражают данные друг друга, вы сможете получить полный набор данных с одного сервера, но в противном случае не потребуется много времени, чтобы изменить приведенный выше сценарий оболочки, чтобы загрузить данные с других серверов, все они тоже отвечают 'ftp.????' и имеют одинаковую универсальную структуру папок.

Однако я не могу помочь вам с синтаксическим анализатором, так как он содержит проприетарный код, но формат файла (особенно если вы получаете разделенные файлы) идентичен тому, что вы видите в типичном выводе whois, поэтому с ним очень легко работать.

Загружая и обрабатывая свои собственные данные таким образом, вы обходите любые ограничения, налагаемые провайдерами, и в результате, скорее всего, гораздо быстрее запрашивать собственное хранилище данных, чем каждый раз отправлять запросы с вашего сервера на серверы запросов. кто-то вводит IP-адрес.

ОБНОВИТЬ

Есть много, намного больше серверов whois, чем те, которые я перечислил здесь, однако вместо того, чтобы перечислять их все на этой странице, эта ссылка:

https://jfreewhois.googlecode.com/git/JFreeWhois/src/uk/org/freedonia/jfreewhois/etc/serverlist.xml

приведет вас к файлу XML, который является частью проекта в коде Google, возвращенный файл XML даст вам довольно большой список всех доступных серверов whois, а также список TLD, которые обслуживает каждый из них, что позволит вам адаптировать свой скрипт для связи с правильным сервером в зависимости от введенного адреса.

person shawty    schedule 29.05.2013

Добавляйте к своим запросам префикс =, например =example.com, а не просто доменное имя, и вы не увидите дополнительных результатов.

Длинная причина заключается в том, что по умолчанию сервер whois выполняет поиск по префиксу и возвращает все объекты, хранящиеся в реестре, имя которых начинается с имени, которое вы указываете в запросе. И, как бы мало это ни было известно, серверы имен — это объекты, хранящиеся в реестрах, и давно считалось забавным регистрировать бесполезные серверы имен только для того, чтобы «разыграть» невинных наблюдателей, выполняющих запросы и возвращающих результаты как ваши, которые могут быть интерпретированы некоторыми людьми. не зная подробностей, таких как «Боже мой, XXXX был взломан, посмотри на эти результаты ...», поскольку вы могли в основном добавить любое слово в качестве метки (между двумя точками), если вы закончили .COM/.NET доменное имя, которым вы владеете. Конечно, к атаке это не имеет никакого отношения.

Добавляя префикс с равной строкой, вы обеспечиваете точное совпадение вместо совпадения префикса. Обратите внимание, что пурист может добавить, что даже в этом случае вы можете увидеть две записи назад, поскольку вы можете зарегистрировать сервер имен, имя которого является именем доменного имени (что скорее сбивает с толку, чем полезно, но это возможно, и это происходит).

Кстати, для доменных имен .COM вы должны использовать соответствующий whois-сервер реестра, то есть whois.verisign-grs.com. То же самое для других TLD. Имейте в виду, что в зависимости от того, что вы ищете, вам может потребоваться 2 запроса whois на домен, поскольку .COM/.NET (в настоящее время) все еще является тонким реестром. См. мой ответ на https://unix.stackexchange.com/a/407030/211833 для получения дополнительной информации об этом точка.

person Patrick Mevzek    schedule 03.01.2018