Когда я пытаюсь выполнить команду ping по 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, в чем может быть причина этой странной проблемы?
решение1
На самом деле такое поведение является нормальной функцией ping и не имеет никакого отношения к вашему реальному оборудованию.
Действительно, добавление к IP-адресу (или его части) начального нуля приведет к тому, что число будет интерпретироваться каквосьмеричный.
Это 057
означает 57
в восьмеричной системе счисления 47. Таким образом, ping отправитИКМПсделать запрос к машине, расположенной по адресу, 10.10.208.47
и получить от нее ответ.
Обратите внимание, что вы также можете пинговать адреса в шестнадцатеричном формате, используя префикс 0x вместо просто 0.
Редактировать: Как следует из многих комментариев, эта функция на самом деле не является специфичной ping
и может быть найдена во многих программах CLI, манипулирующих IP-адресами.
решение2
Ping, как и многие другие программы unix, использует библиотеки C в вашей системе unix для разрешения имен. Одна из используемых функций — inet_aton
.
На странице руководства inet_aton
написано:
Все числа, представленные как ``части'' в записи `.', могут быть десятичными, восьмеричными или шестнадцатеричными, как указано в языке C (т. е. начальные 0x или 0X подразумевают шестнадцатеричное число; в противном случае начальный 0 подразумевает восьмеричное число; в противном случае число интерпретируется как десятичное).
Поэтому, когда вы используете ведущий ноль, число интерпретируется как восьмеричное. Таким образом, 57 = 047 = 0x39.