
Преобразование короткой записи IP в полный адрес

Преобразование короткой записи IP в полный адрес
Когда вы вводите команду вроде ping 1.1, система автоматически превращает ее в ping 1.0.0.1, и это не ошибка. Это происходит из-за особенности в работе парсера IP-адресов в большинстве операционных систем. Система пытается "достроить" короткую запись 1.1 до полного IP-адреса, интерпретируя ее как первый и последний октет, а средние части заполняя нулями. Такой подход уходит корнями в старые стандарты и до сих пор поддерживается многими утилитами для обратной совместимости. Поэтому 1.1 естественным образом становится 1.0.0.1, просто потому, что так устроен разбор адресов в сетевой инфраструктуре.
Сетевой стек, будь то в Windows, Linux или других Unix-подобных системах, умеет распознавать неполные адреса и дополнять их до стандартного вида из четырех октетов. При этом недостающие части заполняются нулями справа: запись из одного числа превращается в 0.0.0.x, из двух чисел - в a.0.0.b, а три числа превращаются в a.b.0.c. Система берет все указанные числа, размещает их в позиции самого старшего (первого) и самого младшего (последнего) октета. Все пропущенные средние октеты она заполняет нулями.
Например, применим это правило к 1.1. У нас есть два числа: 1 и 1. Первое число 1 становится первым октетом: 1. Последнее число 1 становится четвертым октетом: .1. Пропущенные второй и третий октеты заполняются нулями: .0.0.
ping 1.1 -> 1.0.0.1Это правило работает для записей разной длины. Первый октет = 10, последний = 1, пропущенные = 0.0.
ping 10.1 -> 10.0.0.1Или, например, ваш локальный компьютер - localhost:
ping 127.1 -> 127.0.0.1А вот три числа. Первое (192) становится первым октетом, последнее (1) - четвертым, а среднее (168) становится вторым октетом. Третий октет, который был пропущен, заполняется нулем.
ping 192.168.1 -> 192.168.0.1Такая логика - это во многом пережиток прошлого, удобный для быстрого тестирования в больших сетях класса A. Администраторам было проще написать 10.1 вместо полного 10.0.0.1, экономя время.
На некоторых системах поведение может отличаться. Это не универсальный стандарт, а распространенная практика. На некоторых системах или в специфическом сетевом ПО поведение может быть другим (например, может подставляться адрес из вашей подсети). Лучше использовать полный адрес. Для надежности и избежания путаницы в скриптах и командах всегда используйте полную форму IP-адреса.

Преобразование короткой записи IP в полный адрес
А где еще это можно использовать? Когда-то я выкладывал статью "Прячем IP-адрес сервера в ссылке". Вкратце, это малоизвестный, но полностью корректный с точки зрения стандартов способ представления IPv4-адреса в виде единственного 32-битного числа (decimal IP или decimal dot notation).
Можно отправлять число в короткой записи и передавать его в разных пакетах или скрывать в легитимных данных. Обход примитивных анализаторов и фильтров: например, многие системы безопасности (особенно устаревшие или самописные) ищут именно доменные имена или IP-адреса в точечной нотации. При статическом анализе кода такие числа не бросаются в глаза как IP-адреса. При этом надо понимать, что таких IP-адресов с ".0." или вообще ".0.0." не так много - хуже, чем в свое время были "блатные" номера ICQ. Подгонять малварь под специальные адреса - слишком накладно.
Но, как говорится, "все гениальное просто", а эта техника именно простая, но от того не менее эффективная в определенных контекстах. Отличный пример того, как понимание фундаментальных принципов работы протоколов дает неожиданные возможности для их использования.
Просмотров: 340 | Комментариев: 1
Метки: сеть
Комментарии
Отзывы посетителей сайта о статье
Александр
(26.11.2025 в 10:25):
Очень удобная особенность. Сам часто пользуюсь. Жаль что работает не везде.
Добавить комментарий
Заполните форму для добавления комментария


