Gethostbyname: примеры (PHP)
gethostbyname(string $hostname): stringФункция gethostbyname возвращает IPv4-адрес для указанного имени хоста. Она выполняет преобразование доменного имени в соответствующий IP-адрес, используя механизм DNS-запросов. Основное применение - получение сетевого адреса для последующего установления соединений.
Функция принимает один обязательный параметр:
- hostname (string) - доменное имя, для которого необходимо получить IP-адрес. Может быть задано в виде FQDN (полное доменное имя) или простого имени хоста в локальной сети.
Возвращаемое значение - строка с IPv4-адресом в точечно-десятичной нотации. Если разрешение имени не удалось, возвращается исходная строка hostname.
<?
$ip = gethostbyname('google.com');
echo $ip;
?>142.250.185.174
<?
$result = gethostbyname('non-existent-domain-xyz.test');
echo $result;
?>non-existent-domain-xyz.test
<?
$localIP = gethostbyname('localhost');
echo $localIP;
?>127.0.0.1
Возвращает массив всех IPv4-адресов для указанного хоста. Полезно, когда домен имеет несколько A-записей.
<?
$ips = gethostbynamel('google.com');
print_r($ips);
?>Выполняет обратное преобразование - получает доменное имя по IP-адресу (обратный DNS-запрос).
<?
$host = gethostbyaddr('8.8.8.8');
echo $host;
?>Предоставляет расширенную информацию о DNS-записях, включая различные типы (A, AAAA, MX, TXT и другие). Поддерживает IPv6 через запись AAAA.
<?
$records = dns_get_record('google.com', DNS_A);
print_r($records);
?>Проверяет наличие DNS-записей определенного типа для указанного хоста. Возвращает булево значение.
Не проверяется, вернула ли функция IP-адрес или исходное имя при ошибке.
<?
$ip = gethostbyname('wrong-domain-12345.xyz');
// ОШИБКА: предполагается, что это IP-адрес
$parts = explode('.', $ip);
?>Функция синхронна и блокирует выполнение скрипта до получения ответа от DNS-сервера, что может вызвать задержки.
Функция работает только с IPv4. Для IPv6 требуется использование других методов.
<?
// Не получит IPv6-адрес
$ip = gethostbyname('ipv6.google.com');
echo $ip; // Вернет исходное имя
?>В PHP 8.1.0 добавлена поддержка константы DNS_NUMERICIP в функции dns_get_record(), что улучшает парсинг IP-адресов. Основное поведение gethostbyname осталось неизменным с ранних версий. В PHP 8 улучшена обработка ошибок и предупреждений, связанных с сетевыми функциями.
<?
function isHostResolvable($hostname) {
$ip = gethostbyname($hostname);
return $ip !== $hostname && filter_var($ip, FILTER_VALIDATE_IP);
}
echo isHostResolvable('google.com') ? 'Да' : 'Нет';
?>Да
<?
function getCachedHostIp($hostname, $cacheTime = 3600) {
$cacheFile = '/tmp/ip_' . md5($hostname) . '.cache';
if (file_exists($cacheFile) && time() - filemtime($cacheFile) < $cacheTime) {
return file_get_contents($cacheFile);
}
$ip = gethostbyname($hostname);
if ($ip !== $hostname) {
file_put_contents($cacheFile, $ip);
}
return $ip;
}
?><?
$hosts = ['php.net', 'github.com', 'example.com'];
$results = [];
foreach ($hosts as $host) {
$ip = gethostbyname($host);
$results[$host] = ($ip === $host) ? 'Не разрешен' : $ip;
}
print_r($results);
?><?
$domain = 'api.example.com';
$ip = gethostbyname($domain);
if ($ip !== $domain) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://$ip");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Host: $domain"]);
// ... дальнейшая настройка curl
}
?>Gethostbyname в Python
Функция socket.gethostbyname() из стандартной библиотеки. В отличие от PHP, может вызывать исключения.
import socket
try:
ip = socket.gethostbyname('google.com')
print(ip)
except socket.gaierror:
print('Ошибка разрешения имени')Используется модуль dns с асинхронным API. Метод dns.resolve4() возвращает массив IPv4-адресов.
const dns = require('dns');
dns.resolve4('google.com', (err, addresses) => {
if (err) console.log(err);
else console.log(addresses);
});Gethostbyname в MySQL
Функция INET_ATON() преобразует IP-адрес в числовое значение, но не выполняет DNS-запросы. Для DNS-разрешения требуется внешнее решение.
SELECT INET_ATON('192.168.1.1');3232235777