Как получить доменное имя только с IP-адреса для поиска в Whois? - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь выполнить команду who-is на произвольном IP-адресе для внутреннего использования (без доступа publi c) следующим образом:

<code>function echo_whois($ip)
{
    $host = gethostbyaddr($ip);

    //How to get domain from host?
    //$domain = ?

    echo("<pre>");
    echo(shell_exec("whois ".$domain));
    echo("
");}

Проблема в том, что я не могу найти способ получить domain name от host name.

Вот пример, скажем, для IP 114.237.31.186, который разрешается до 186.31.237.114.broad.lyg.js.dynamic.163data.com.cn .

Есть ли в PHP функция, которая может это сделать?

1 Ответ

0 голосов
/ 08 марта 2020

Проблема в том, что я не могу найти способ получить доменное имя из имени хоста.

Потому что нет или вы конфликтуете с различными вещами.

На уровне DNS у вас может быть запись PTR, переходящая с одного IP-адреса на имя. Это, однако, не является обязательным. Более подробную информацию об этом смотрите в моем полном ответе на https://superuser.com/a/1530362/693623

Если мы сделаем это с вашим делом, у нас действительно есть ответ, но это не общее правило c :

$ dig -x 114.237.31.186

; <<>> DiG 9.11.5-P4-5.1ubuntu2.1-Ubuntu <<>> -x 114.237.31.186
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40422
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1480
;; QUESTION SECTION:
;186.31.237.114.in-addr.arpa.   IN  PTR

;; ANSWER SECTION:
186.31.237.114.in-addr.arpa. 86400 IN   PTR 186.31.237.114.broad.lyg.js.dynamic.163data.com.cn.

Это чисто DNS, там нет ничего о whois. И у вас есть библиотеки DNS на PHP (или на любом другом языке) для выполнения DNS-запросов от вашего имени (не выкладывайте для запуска dig по тем же причинам, что подробно описаны ниже для whois).

Теперь так как вы говорите о whois, вы можете подумать о чем-то еще.

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

Современные клиенты whois обычно находят правильно RIR, чтобы связаться для получения данных, в вашем случае это приведет к:

$ whois 114.237.31.186
% [whois.apnic.net]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

% Information related to '114.224.0.0 - 114.239.255.255'

% Abuse contact for '114.224.0.0 - 114.239.255.255' is 'anti-spam@ns.chinanet.cn.net'

inetnum:        114.224.0.0 - 114.239.255.255
netname:        CHINANET-JS
descr:          Chinanet Jiangsu Province Network
descr:          China Telecom
descr:          No.31,jingrong street
descr:          Beijing 100032
country:        CN
admin-c:        CH93-AP
tech-c:         CJ186-AP
mnt-by:         APNIC-HM
mnt-lower:      MAINT-CHINANET-JS
mnt-routes:     MAINT-CHINANET-JS
status:         ALLOCATED PORTABLE
remarks:        --------------------------------------------------------
remarks:        To report network abuse, please contact mnt-irt
remarks:        For troubleshooting, please contact tech-c and admin-c
remarks:        Report invalid contact via www.apnic.net/invalidcontact
remarks:        --------------------------------------------------------
last-modified:  2016-05-04T00:13:17Z
source:         APNIC

et c.

Вы можете найти одно и то же в Интернете на веб-сайте RIR.

Что касается whois, то есть две другие важные вещи:

  • из программы, не раскошеливайтесь на запуск команды whois, это имеет только недостатки. Все языки программирования имеют библиотеки, выполняющие запросы whois, и вы должны это использовать. Если это не так и, по крайней мере, поскольку whois является очень простым протоколом команд / ответов, вы можете сделать это самостоятельно: просто откройте сокет TCP на порту 43, отправьте запрос (обычно имя домена или IP-адрес), а затем * 1032. * и прочитайте ответ (на этом этапе удаленная сторона автоматически отключит соединение). Конечно, здесь трудность состоит в том, чтобы выяснить, к какому серверу обращаться, и это зависит от вашего запроса
  • , особенно для RIR, теперь существует RDAP, который является гораздо более совершенным протоколом, чем whois, и вы всегда должны его использовать; его выход JSON так проще анализировать, чем необработанный неструктурированный вывод whois.
...