Почему я могу пинговать 127.1?

3119
Alexandre de Verteuil

Я знаю, что IPv6 позволяет пропускать последовательные нули. Но как насчет IPv4? Я не нашел никакой ссылки на это в Интернете, включая Wikipedia и RFC 791 - Internet Protocol. В этом документе предполагается, что «начальные нули могут быть опущены» в адресе IPv4 (поиск по слову «опущен»). Не достаточно конкретно.

Проверьте эту сессию оболочки:

[~]$ ping -c 1 127.1 PING 127.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.040 ms  --- 127.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.040/0.040/0.040/0.000 ms [~]$ ping -c 1 127.0.1 PING 127.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.044 ms  --- 127.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms [~]$ ssh 127.1 : The authenticity of host '127.1 (127.0.0.1)' can't be established. ECDSA key fingerprint is 04:48:fa:f2:ef:95:7c:35:46:39:2e:d3:89:dd:cd:87. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '127.1' (ECDSA) to the list of known hosts. alex@127.1's password:  

Очевидно, что и ping, и ssh понимают 127.1 и 127.0.1 так же, как 127.0.0.1. Где это указано?

10
[Эта страница руководства] (http://linux.die.net/man/3/inet_aton), на которую ссылается [эта публикация переполнения стека] (http://stackoverflow.com/questions/10133820/is-there-any-documentation) -for-ommiting-zeroes-in-dot-decimal-notation-of-ipv4-a) может быть прямо на вашей аллее. nerdwaller 10 лет назад 7
Это древний стиль обозначений, но да: он работает :-) Sander Steffann 10 лет назад 1
@nerdwaller: Пожалуйста, опубликуйте это как ответ. (Бонусные баллы, если вы выясните, почему `ping 0.0.0.0` или` ping 0` работают одинаково ...) grawity 10 лет назад 1
http://superuser.com/questions/486788/why-does-pinging-192-168-072-only-2-dots-return-a-response-from-192-168-0-58 Der Hochstapler 10 лет назад 2

2 ответа на вопрос

13
nerdwaller

Около года назад есть сообщение о переполнении стека, которое спрашивает о чем-то подобном ( этот пост ).

Основная причина в том, как inet_aton()( man-страница ) преобразует октеты в двоичный адрес.

ABCD

Каждая из четырех числовых частей указывает байт адреса; байты назначаются в порядке слева направо для создания двоичного адреса.

азбука

Части a и b определяют первые два байта двоичного адреса. Часть c интерпретируется как 16-битное значение, которое определяет самые правые два байта двоичного адреса. Эта нотация подходит для указания (устаревших) сетевых адресов класса B.

аб

Часть a определяет первый байт двоичного адреса. Часть b интерпретируется как 24-битное значение, которое определяет самые правые три байта двоичного адреса. Эта нотация подходит для указания (устаревших) сетевых адресов класса C.

a

Значение a интерпретируется как 32-разрядное значение, которое сохраняется непосредственно в двоичный адрес без какой-либо перестановки байтов.

Это не определено POSIX.anything - но это доступно довольно широко.

Отлично, я также проверил пост, на который вы ссылались в Stack Overflow. У него было отличное понимание того, как можно использовать разные системы счисления. @grawity [Wikipedia] (https://en.wikipedia.org/wiki/Internet_Protocol_version_4#Special-use_addresses) говорит, что 0.0.0.0/8 - это текущая сеть. Я предполагаю, что 0.0.0.0/32 должен быть текущим хостом, и этот пинг ожидает только / 32 "сетей". Я не нашел явную ссылку, хотя. Alexandre de Verteuil 10 лет назад 1
@AlexandredeVerteuil: ping ожидает * hosts *, а не сети ... так что да, / 32 для IPv4. grawity 10 лет назад 2
3
David Schwartz

Это пережиток старых времен классной адресации. 127.1означает сеть 127, хост 1. (И, да, 127.257это законно, потому что сеть 127может иметь более 256 хостов.

127.257, в частности 127.0.1.1, адрес, который я на самом деле вижу на старом активаторе сервера KMS, который работал в Windows 8.0 Paul Stelian 7 лет назад 0

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