Whois, как получить данные IP-адреса и домена в PHP

Несколько примеров как в PHP получить информацию о домене и IP-адресе.

Получить информацию об IP-адресе можно с помощью сервиса WHOIS REST API, отправив запрос на http://rest.db.ripe.net/search?query-string=xxx.xxx.xxx.xxx
Ответ будет в формате XML.

$ip = '213.180.193.1';
$xml = simplexml_load_string(file_get_contents('http://rest.db.ripe.net/search?query-string=' . $ip));
$array = json_decode(json_encode($xml), TRUE);		

$data = array();
foreach ($array['objects'] as $row) {
	foreach ($row as $row2) {
		foreach ($row2['attributes'] as $row3) {
			foreach ($row3 as $row4) {
				$data[$row4['@attributes']['name']][] = $row4['@attributes']['value'];
			}
		}
	}
}

print_r($data);
PHP

Результат:

Array(
	[inetnum] => Array(
		[0] => 213.180.193.0 - 213.180.193.255
	)
	[netname] => Array(
		[0] => YANDEX-213-180-193
	)
	[status] => Array(
		[0] => ASSIGNED PA
	)
	[country] => Array(
		[0] => RU
	)
	[descr] => Array(
		[0] => Yandex enterprise network
		[1] => Yandex enterprise network
	)
	[admin-c] => Array(
		[0] => YNDX1-RIPE
		[1] => PGR777-RIPE
	)
	[tech-c] => Array(
		[0] => YNDX1-RIPE
		[1] => EM3673-RIPE
		[2] => AUR2-RIPE
	)
	[remarks] => Array(
		[0] => INFRA-AW
		[1] => trouble: ------------------------------------------------------
		[2] => trouble: Points of contact for Yandex LLC Network Operations
		[3] => trouble: ------------------------------------------------------
		[4] => trouble: Routing and peering issues: noc@yandex.net
		[5] => trouble: SPAM issues: abuse@yandex.ru
		[6] => trouble: Network security issues: abuse@yandex.ru
		[7] => trouble: Mail issues: postmaster@yandex.ru
		[8] => trouble: General information: info@yandex.ru
		[9] => trouble: ------------------------------------------------------
	)
	[mnt-by] => Array(
		[0] => YANDEX-MNT
		[1] => YANDEX-MNT
		[2] => YANDEX-MNT
	)
	[created] => Array(
		[0] => 2011-08-30T09:34:57Z
		[1] => 2002-06-07T05:35:50Z
		[2] => 2012-02-09T15:59:56Z
	)
	[last-modified] => Array(
		[0] => 2014-03-26T08:38:45Z
		[1] => 2018-08-03T07:15:46Z
		[2] => 2012-02-09T15:59:56Z
	)
	[source] => Array(
		[0] => RIPE
		[1] => RIPE
		[2] => RIPE
	)
	[role] => Array(
		[0] => Yandex LLC Network Operations
	)
	[address] => Array(
		[0] => Yandex LLC
		[1] => 16, Leo Tolstoy St.
		[2] => 119021
		[3] => Moscow
		[4] => Russian Federation
	)
	[phone] => Array(
		[0] => +7 495 739 7000
	)
	[fax-no] => Array(
		[0] => +7 495 739 7070
	)
	[nic-hdl] => Array(
		[0] => YNDX1-RIPE
	)
	[abuse-mailbox] => Array(
		[0] => abuse@yandex.ru
	)
	[route] => Array(
		[0] => 213.180.193.0/24
	)
	[origin] => Array(
		[0] => AS13238
	)
)

С доменами сложнее, т.к. нужно отправлять TCP запрос (43-й порт) на WHIOS-сервер в зависимости от зоны домена, полный список whois-серверов.

Основные зоны

Зона Сервер
.ru, .su, .рф whois.tcinet.ru
.com, .net whois.verisign-grs.net
.org whois.pir.org
$server = 'whois.tcinet.ru';
$host = 'yandex.ru';

$socket = fsockopen($server, 43);
if ($socket) {
	fputs($socket, $host . PHP_EOL);

	$text = '';
	while (!feof($socket)) {
		$text .= fgets($socket, 128);
	}
	fclose($socket);
	echo $text;
}
PHP

Результат:

% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian) 
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).

domain:        YANDEX.RU
nserver:       ns1.yandex.ru. 213.180.193.1, 2a02:6b8::1
nserver:       ns2.yandex.ru. 93.158.134.1, 2a02:6b8:0:1::1
nserver:       ns9.z5h64q92x9.net.
state:         REGISTERED, DELEGATED, VERIFIED
org:           YANDEX, LLC.
registrar:     RU-CENTER-RU
admin-contact: https://www.nic.ru/whois
created:       1997-09-23T09:45:07Z
paid-till:     2019-09-30T21:00:00Z
free-date:     2019-11-01
source:        TCI

Last updated on 2019-04-10T13:26:32Z

Есть хороший API сервис «ip-api», возвращает информацию о домене, IP-адресе + геолакацию. Не требует регистрации и ключей, ограничение 150 запросов в минуту с одного IP-адреса, но не для коммерческого использования.

$host = 'yandex.ru';
$json = file_get_contents('http://ip-api.com/json/' . $host . '?lang=ru');
$array = json_decode($json, TRUE);	
print_r($array);
PHP
Array
(
    [as] => AS13238 YANDEX LLC
    [city] => Москва
    [country] => Россия
    [countryCode] => RU
    [isp] => Yandex enterprise network
    [lat] => 55.734
    [lon] => 37.5883
    [org] => Yandex LLC
    [query] => 5.255.255.80
    [region] => MOW
    [regionName] => Москва
    [status] => success
    [timezone] => Europe/Moscow
    [zip] => 
)
10.04.2019, обновлено 22.11.2021
10327

Комментарии 1

Yaroslav Chekalin Yaroslav Chekalin
24 сентября 2021 в 12:00
0
Отличный сайт. Очень помог!

, чтобы добавить комментарий.

Другие публикации

Команды PuTTY, SSH, Unix
Для удаленного управления Unix или Linux веб-сервером по SSH-протоколу обычно используют программу PuTTY, далее приведен список основных команд.
7319
+4
Как прочитать SSL сертификат из PHP
SSL сертификат можно получить с помощью контекста потоков (Stream Context), а разобрать его поможет функция...
3465
+5
Список MIME типов
Ниже приведён список MIME-заголовков и расширений файлов.
9780
+4
Яндекс.Доставка работа с API в PHP
Примеры работы с API Яндекс.Доставки (для заказа перевозки грузов корпоративным клиентам).
947
+1
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
120897
+18
Работа с JSON в PHP
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и...
62147
+10