Пинг IP-адреса отвечает другим IP-адресом

Пинг IP-адреса отвечает другим IP-адресом

Когда я пытаюсь выполнить команду 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.

Связанный контент