Когда я пытаюсь проверить с помощью ping-запросов IP-адрес 10.10.208.57
У меня нет ответа начиная ни с чего, существуют в сети с тем IP-адресом.
Однако, если я пытаюсь проверить с помощью ping-запросов 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
и таким образом получит от нее ответ.
Обратите внимание, что вы также можете отправлять ping адреса в шестнадцатеричной системе, используя префикс 0x вместо простого 0.
Edit : Как показывают многие комментарии, эта возможность на самом деле не специфична для ping
и может быть найдена во многих софтверных программах CLI, манипулирующих IP-адресами.
Ping, как и многие другие unix-программы, используют библиотеки C в Вашей unix-системе для разрешения имен. Одной из используемых функций является inet_aton
.
В man-странице для inet_aton
написано:
Все числа, поставляемые в виде ``parts'' в значении `.' могут быть десятичными, восьмеричными или шестнадцатеричными, как указано в языке Си (т.е., ведущее 0x или 0X подразумевает шестнадцатеричное; в противном случае ведущее 0 подразумевает восьмеричное; в противном случае число интерпретируется как десятичное)
Таким образом, когда вы используете ведущий ноль, число интерпретируется как восьмеричное. Таким образом, 57 = 047 = 0x39.