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