Проверка с помощью ping-запросов IP-адреса отвечает другим IP

Когда я пытаюсь проверить с помощью 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 то, что могло быть источником этой странной проблемы?

21
задан 19 May 2015 в 23:36
2 ответа

Это поведение на самом деле связано с нормальной функцией ping и не имеет никакого отношения к вашему реальному оборудованию.

На самом деле, префикс IP адреса (или его части) с ведущим нулем приведет к тому, что число будет интерпретироваться как восьмеричное .

Таким образом, 057 означает 57 в базе 8, которая равна 47. Таким образом, ping отправит запрос ICMP на машину, расположенную по адресу 10.10.208.47 и таким образом получит от нее ответ.

Обратите внимание, что вы также можете отправлять ping адреса в шестнадцатеричной системе, используя префикс 0x вместо простого 0.

Edit : Как показывают многие комментарии, эта возможность на самом деле не специфична для ping и может быть найдена во многих софтверных программах CLI, манипулирующих IP-адресами.

.
43
ответ дан 2 December 2019 в 20:02

Ping, как и многие другие unix-программы, используют библиотеки C в Вашей unix-системе для разрешения имен. Одной из используемых функций является inet_aton.

В man-странице для inet_aton написано:

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

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

15
ответ дан 2 December 2019 в 20:02

Теги

Похожие вопросы