Назад | Перейти на главную страницу

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

Когда я пытаюсь пропинговать 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 говорит:

Все номера представлены как `` части '' в `. ' нотация может быть десятичной, восьмеричной или шестнадцатеричной, как указано в языке C (т.е. ведущий 0x или 0X подразумевает шестнадцатеричный; в противном случае ведущий 0 подразумевает восьмеричный; в противном случае число интерпретируется как десятичное).

Поэтому, когда вы используете начальный ноль, число интерпретируется как восьмеричное. Таким образом, 57 = 047 = 0x39.