Конвертер IP в десятичный формат
Переведите IP-адрес в десятичное, шестнадцатеричное, двоичное и восьмеричное число или введите любое из этих чисел, чтобы получить IP обратно. Каждый октет нарисован как 8 бит с весами разрядов, так что расчёт легко проследить.
Прочитано как запись с точками
| Октет | 1286432168421 | Hex |
|---|---|---|
| 198 | 11000110 | C6 |
| 128+64+4+2 × 256³ = 3 321 888 768 | ||
| 51 | 00110011 | 33 |
| 32+16+2+1 × 256² = 3 342 336 | ||
| 100 | 01100100 | 64 |
| 64+32+4 × 256 = 25 600 | ||
| 77 | 01001101 | 4D |
| 64+8+4+1 × 1 = 77 | ||
| Итого | ||
| = 3 325 256 781 | ||
IP-адрес или его десятичное, шестнадцатеричное, двоичное или восьмеричное число, чтобы получить IP обратно. Преобразование идёт в вашем браузере, ничего не отправляется.
3325256781
То же число в коде
SELECT INET_ATON('198.51.100.77');3325256781SELECT '198.51.100.77'::inet - '0.0.0.0'::inet;3325256781int(ipaddress.ip_address('198.51.100.77'))3325256781ip2long('198.51.100.77')3325256781- Десятичная запись с точками
- Десятичное число
- Шестнадцатеричное
- Двоичные октеты
- Восьмеричное
- Шестнадцатеричные октеты
- Восьмеричные октеты
- В браузере (каждый открывает 198.51.100.77)
- Имя для обратного DNS
- Как IPv6 (отображённый)
- IPv4 → IPv6
Как перевести IP-адрес в десятичное число?
Умножьте четыре числа на 256³, 256², 256 и 1 и сложите: 192.168.1.1 — это 192 × 16 777 216 + 168 × 65 536 + 1 × 256 + 1 = 3 232 235 777.
Адрес IPv4 — это одно 32-битное число, записанное четырьмя 8-битными частями, поэтому запись с точками и десятичная запись — одно и то же значение. В документации MySQL в качестве примера приведено 10.0.5.9 = 167773449.

Любая форма на входеС точками, десятичное число, hex, двоичная, восьмеричная запись или URL: поле читает всё.Биты и веса разрядовКаждая 1 добавляет вес своего разряда: 128 + 64 + 4 + 2 = 198.× 256³, 256², 256, 1Каждый октет умножается на свой вес, затем всё складывается.Все формы на выходеHex, двоичная и восьмеричная запись и URL, которые принимают браузеры, каждая с кнопкой копирования.ЧислоВесь адрес как одно 32-битное число, готовое к копированию, и тип адреса.Как перевести число в IP-адрес в стандартной форме с точками?
Разделите на 16 777 216, затем остаток — на 65 536, затем на 256: три частных и последний остаток — это четыре числа, так что 3232235777 — это 192.168.1.1.
Введите число в конвертер, и он сделает то же самое, а заодно покажет hex, двоичную и восьмеричную запись и формы, которые принимают браузеры. Числа больше 4 294 967 295 — не адреса IPv4: конвертер читает их как числа IPv6 и сообщает об этом.
3 232 235 777÷ 16 777 216=192остаток 11 010 30511 010 305÷ 65 536=168остаток 257257÷ 256=1остаток 11÷ 1=1остаток 0192.168.1.1
Как перевести IP-адрес в двоичную систему счисления?
Запишите каждое из четырёх чисел 8 битами с весами разрядов 128, 64, 32, 16, 8, 4, 2 и 1: 192 = 128 + 64, то есть 11000000, а 192.168.1.1 — это 11000000.10101000.00000001.00000001.
Идите по весам разрядов слева: если вес помещается, пишите 1 и вычитайте его, иначе пишите 0. Для 168: 128 помещается (остаётся 40), 64 нет, 32 помещается (остаётся 8), 16 нет, 8 помещается, получается 10101000. Чтобы перевести из двоичной системы в десятичную, сложите веса разрядов, где стоят единицы.
| 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | ||
|---|---|---|---|---|---|---|---|---|---|
| 192 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 128 + 64 |
| 168 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 128 + 32 + 8 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
11000000.
Как перевести IP-адрес в шестнадцатеричную систему?
Разделите 8 бит каждого октета на две половины по 4 бита и запишите каждую половину одной hex-цифрой: 192 — это 1100 0000, то есть C0, так что 192.168.1.1 — это 0xC0A80101.
В обратную сторону каждые две hex-цифры дают один октет: C0 — это 192. IPv6 тоже записывает встроенный адрес IPv4 в hex: ::ffff:c0a8:101 — это 192.168.1.1. Браузеры принимают hex-число как хост: http://0xC0A80101/ открывает 192.168.1.1.
11000000C010101000A8000000010100000001010xC0A80101
4 бита = 1 hex-цифра
Почему http://3232235777 открывает 192.168.1.1?
Потому что браузеры читают хост, состоящий только из чисел, как адрес IPv4 в любой из старых форм inet_aton, включая одно десятичное число, и затем загружают адрес с точками.
Каждая часть может быть десятичной (URL Standard), шестнадцатеричной с 0x или восьмеричной с ведущим 0, а если частей меньше четырёх, последняя заполняет оставшиеся байты. Поэтому http://192.168.1/ открывает 192.168.0.1, а не 192.168.1.1. ping и curl принимают те же формы.
Числа больше 32 бит, 8 или 9 в части, которая начинается с 0, и пятая часть отклоняются.
| Введено в адресной строке | Открывает |
|---|---|
http://3232235777/ | 192.168.1.1 |
http://0xC0A80101/ | 192.168.1.1 |
http://0300.0250.1.1/ | 192.168.1.1 |
http://127.1/ | 127.0.0.1 |
http://192.168.1/ | 192.168.0.1 |
http://4294967296/ | Отклонено |
http://09/ | Отклонено |
http://192.0.2.1.5/ | Отклонено |
Почему альтернативные формы IP-адреса важны для безопасности?
Потому что фильтр, сравнивающий адреса как текст, можно обмануть: 2130706433, 0x7f.1, 127.1 и ::ffff:127.0.0.1 — это всё 127.0.0.1, поэтому фильтры должны сравнивать числовое значение, а не строку.
OWASP перечисляет эти кодировки среди способов обойти защиту от SSRF. Такая ошибка встречалась и в библиотеках: npm-пакеты netmask и ip, модуль ipaddress в Python и пакет net в Go в своё время неправильно читали ведущие нули или альтернативные формы, и с тех пор это исправлено.
Разбирайте адрес строгим парсером, переводите в число, затем сравнивайте диапазоны. Блокируйте и отображённые адреса IPv4 из заблокированных диапазонов.
deny 127.0.0.1
Сравнение как текста
127.0.0.1заблокировано
2130706433проходит
0x7f.1проходит
127.1проходит
::ffff:127.0.0.1проходит
Сравнение как числа
127.0.0.12130706433 · заблокировано
21307064332130706433 · заблокировано
0x7f.12130706433 · заблокировано
127.12130706433 · заблокировано
::ffff:127.0.0.12130706433 · заблокировано
Как перевести адрес IPv6 в десятичное число?
Так же, но с восемью 16-битными группами: 2001:db8::1 — это 42540766411282592856903984951653826561, число длиной до 39 цифр, для которого в JavaScript нужен BigInt.
Адресов IPv6 всего 2^128. Числа JavaScript хранят целые значения точно только до 2^53 − 1, поэтому обычная арифметика незаметно округляет значения IPv6. int(ipaddress.ip_address(…)) в Python даёт точный результат.
2001:db8::1
42540766411282592856903984951653826561
точно (BigInt)
42540766411282592856903984951653826560
Number(): округление после 2^53
Как переводить IP-адреса в числа в коде и базах данных?
Используйте функции самой платформы и беззнаковый тип: INET_ATON() в MySQL со столбцом INT UNSIGNED, вычитание inet в PostgreSQL, int(ipaddress.ip_address(…)) в Python и >>> 0 после сдвигов в JavaScript.
Знаковое 32-битное целое не вмещает адреса начиная с 128.0.0.0: << в JavaScript даёт -1062731519 для 192.168.1.1, а ip2long() в PHP уходит в минус на 32-битных сборках. Для IPv6 MySQL использует INET6_ATON() и VARBINARY(16).
› SELECT INET_ATON('192.168.1.1'), INET_NTOA(3232235777); 3232235777 | 192.168.1.1
MySQL 8.4
› SELECT '192.168.1.1'::inet - '0.0.0.0'::inet, '0.0.0.0'::inet + 3232235777; 3232235777 | 192.168.1.1
PostgreSQL 16
› import ipaddress int(ipaddress.ip_address('192.168.1.1')), ipaddress.IPv4Address(3232235777) (3232235777, IPv4Address('192.168.1.1'))
Python ipaddress
› '192.168.1.1'.split('.').reduce((n, o) => (n << 8) | +o, 0) >>> 0 3232235777
JavaScript
› echo ip2long('192.168.1.1'), ' ', long2ip(3232235777); 3232235777 192.168.1.1
PHP 8
Частые вопросы
Как перевести 192.168.1.1 в десятичную форму?
Какое наибольшее десятичное значение у адреса IPv4?
Как перевести 3232235777 в стандартную форму IP-адреса с точками?
Что значит ведущий ноль, например 010, в IP-адресе?
Почему 192.168.1 открывает 192.168.0.1?
Как перевести IP-адрес из двоичной системы в десятичную и обратно?
Как хранить IP-адреса в MySQL в виде чисел?
Почему число IP-адреса получается отрицательным в JavaScript или PHP?
Можно ли перевести адрес IPv6 в десятичное число?
http://0x7f000001/ — это то же самое, что 127.0.0.1?
Чего-то не хватает?Предложите функцию или новый инструмент
Похожие инструменты
IPv6 в IPv4
IPv4 внутри адреса IPv6: отображённый, NAT64, 6to4, Teredo и ISATAP, бит за битом
IPv4 в IPv6
Все формы IPv6 адреса IPv4: отображённый, NAT64 и 6to4, с пометкой «используется» или «редкость»
Сжатие IPv6
Сжатие и полная запись адресов IPv6 по RFC 5952 и правило, которое убрало каждый ноль
Мой IP адрес
Ваш публичный IPv4 и IPv6 сразу, с сетью, местоположением и проверкой VPN
Проверка IPv6
Проверьте, работает ли IPv6, что выбирает браузер и есть ли IPv6 у сайта
Калькулятор подсетей
Сеть, широковещательный адрес, доступные хосты и маски для любого блока IPv4 или IPv6, а также VLSM, разбиение и облачные подсети
Обратный DNS
Поиск имён хостов по IP адресу через записи PTR
Проверка DNS
Все DNS-записи прямо с серверов имён домена рядом с кешем Google и Cloudflare