Inet ntop: примеры (PHP)
inet_ntop(string $ip): string|falseФункция inet_ntop преобразует упакованный двоичный IP-адрес (32-битный для IPv4 или 128-битный для IPv6) в его стандартное строковое представление, удобное для чтения человеком.
Использование функции необходимо при обработке сетевых данных, полученных в двоичном формате, например, из баз данных, системных вызовов или функций, таких как inet_pton.
Функция принимает один обязательный аргумент:
- $ip (string) - строка, содержащая упакованный двоичный IP-адрес.
Возвращаемое значение:
- Строка с представлением адреса (например, '192.168.1.1' или '2001:0db8:85a3::8a2e:0370:7334') в случае успеха.
- Логическое значение false в случае ошибки, например, при передаче строки неверной длины.
$binary_ipv4 = inet_pton('192.0.2.1');
$result = inet_ntop($binary_ipv4);
echo $result;192.0.2.1
$binary_ipv6 = inet_pton('2001:db8::1');
$result = inet_ntop($binary_ipv6);
echo $result;2001:db8::1
$invalid_binary = 'short';
$result = inet_ntop($invalid_binary);
var_dump($result);bool(false)
- inet_pton - выполняет обратное преобразование: из строкового представления в двоичный формат. Используют в паре с inet_ntop для конвертации адресов.
- long2ip - конвертирует 32-битное целое число (long integer) в строку IPv4. Устаревшая функция, не поддерживающая IPv6. inet_ntop является более современной и универсальной заменой.
- ip2long - обратная функция к long2ip. Также работает только с IPv4.
Для работы с IPv6 и современного кода предпочтительнее использование inet_ntop/inet_pton.
Функция ожидает строку длиной 4 байта для IPv4 или 16 байт для IPv6.
$result = inet_ntop('abc');
var_dump($result);bool(false)
При неудаче функция возвращает false, а не строку с сообщением об ошибке.
$binary = false;
$result = inet_ntop($binary);
if ($result === false) {
echo 'Преобразование не удалось.';
}Преобразование не удалось.
Передача произвольной бинарной строки, не соответствующей формату IP, может вернуть неожиданный, но валидный с точки зрения синтаксиса адрес.
$random_binary = "\x00\x00\x00\x00";
$result = inet_ntop($random_binary);
echo $result;0.0.0.0
Функция inet_ntop была добавлена в PHP 5.1.0.
Начиная с PHP 5.3.0, функция стала возвращать false при передаче строки неверной длины, вместо генерации предупреждения (E_WARNING) и возврата null.
В PHP 7.0 и 8.0 не было внесено значительных изменений в поведение этой функции. Она остается стабильным инструментом для работы с сетевыми адресами.
// Предположим, что IP хранится в BINARY(16) поле как IPv6.
// Для IPv4 старшие байты дополняются нулями.
$packedFromDB = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xC0\x00\x02\x01"; // ::FFFF:192.0.2.1
$readableIP = inet_ntop($packedFromDB);
echo $readableIP;::ffff:192.0.2.1
$binaryAddresses = [
inet_pton('10.0.0.1'),
inet_pton('2001:db8::cafe'),
inet_pton('8.8.8.8')
];
foreach ($binaryAddresses as $binAddr) {
echo inet_ntop($binAddr), "\n";
}10.0.0.1 2001:db8::cafe 8.8.8.8
function validateIpString($ipString) {
$binary = @inet_pton($ipString);
if ($binary === false) return false;
$convertedBack = inet_ntop($binary);
// Сравнение для каноничности, особенно для IPv6
return $ipString === $convertedBack;
}
$testIPs = ['192.168.1.1', '0200.200.000.001', '2001:db8::1', '2001:db8:0:0:0:0:0:1'];
foreach ($testIPs as $ip) {
echo $ip, ': ', validateIpString($ip) ? 'Valid' : 'Invalid or non-canonical', "\n";
}192.168.1.1: Valid 0200.200.000.001: Invalid or non-canonical 2001:db8::1: Valid 2001:db8:0:0:0:0:0:1: Invalid or non-canonical
$ipv4_mapped = inet_pton('::ffff:192.0.2.128');
$result = inet_ntop($ipv4_mapped);
echo $result;::ffff:192.0.2.128
Inet ntop в Python
Используют модуль socket. Функция inet_ntop принимает два аргумента: семейство адресов и упакованный адрес.
import socket
packed_ipv4 = socket.inet_aton('192.168.1.1')
result = socket.inet_ntoa(packed_ipv4)
print(result)
packed_ipv6 = socket.inet_pton(socket.AF_INET6, '2001:db8::1')
result6 = socket.inet_ntop(socket.AF_INET6, packed_ipv6)
print(result6)192.168.1.1 2001:db8::1
В Node.js используют модуль os или dns для работы с адресами, но прямой аналог inet_ntop отсутствует. Чаще применяют сторонние библиотеки или парсинг буфера.
Inet ntop в MySQL
Функция INET_NTOA преобразует числовое представление IPv4 в строку. Не поддерживает IPv6.
SELECT INET_NTOA(3232235777);192.168.1.1