Когда я пытаюсь пропинговать IP-адрес, 10.10.208.57
у меня нет ответа, поскольку в сети ничего не существует с этим IP-адресом.
Однако, если я пытаюсь пропинговать 10.10.208.
057
вместо этого, другой IP-адрес отвечает:
root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms
Учитывая, что 10.10.208.47
это принтер Lexmark E120n, что может быть причиной этой странной проблемы?
Ответы:
Такое поведение на самом деле происходит из-за обычной функции ping и не имеет никакого отношения к вашему фактическому оборудованию.
Действительно, префикс IP-адреса (или его части) с начальным нулем приведет к тому, что число будет интерпретировано как восьмеричное .
Таким
057
образом,57
в базе 8 имеется значение 47. Таким образом, ping отправит ICMP- запрос на компьютер, расположенный по адресу,10.10.208.47
и, следовательно, получит от него ответ.Обратите внимание, что вы также можете пинговать адреса в шестнадцатеричном формате, используя префикс 0x вместо 0.
Редактировать: Как отмечается во многих комментариях, эта функция на самом деле не является специфической
ping
и может быть найдена во многих программах CLI, управляющих IP-адресами.источник
Ping, как и многие другие программы Unix, использует библиотеки C в вашей системе Unix для разрешения имен. Одна из функций , используемых в
inet_aton
.Страница руководства для
inet_aton
говорит:Поэтому, когда вы используете начальный ноль, число интерпретируется как восьмеричное. Таким образом, 57 = 047 = 0x39.
источник