Чому я можу пінг 127,1?


11

Я знаю, що IPv6 дозволяє опускати послідовні нулі. Але як щодо IPv4? Я не знайшов посилання на це в Інтернеті, включаючи Вікіпедію та RFC 791 - Інтернет-протокол. Цей документ передбачає, що "Ведучі нулі можна опустити" в 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. Де це вказано?


7
Ця підручна сторінка, пов’язана в цій публікації про переповнення стека, може бути прямо на вашу алею.
nerdwaller

1
Це давній стиль позначення, але так: він працює :-)
Sander Steffann

1
@nerdwaller: Будь ласка, опублікуйте це як відповідь. (Бонусні бали, якщо ви з'ясували, чому так ping 0.0.0.0чи ping 0інакше працює ...)
user1686

Відповіді:


14

Є повідомлення про переповнення стека приблизно рік тому, запитуючи щось подібне ( цю публікацію ).

Основна причина полягає в тому, як inet_aton()( man page ) перетворює октети у двійкову адресу.

а Б В Г

Кожна з чотирьох числових частин вказує байт адреси; байти присвоюються в порядку зліва направо для отримання двійкової адреси.

абс

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

аб

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

а

Значення a інтерпретується як 32-бітове значення, яке зберігається безпосередньо у двійковій адресі без будь-якої перестановки байтів.

Це не визначено POSIX.anything - але воно доступне досить широко.


1
Чудово, і я також перевірив публікацію, з якою ви зв’язувались, на стеку Overflow. Він мав чудові уявлення про те, як можна використовувати різні системи числення. @grawity Wikipedia говорить, що 0,0.0.0/8 - це поточна мережа. Я припускаю, що 0.0.0.0/32 повинен бути поточним хостом, і цей ping очікує лише / 32 "мережі". Я чіткої посилання я не знайшов.
Олександр де Вертоіль

2
@AlexandredeVerteuil: ping очікує хостів , а не мереж ... так, так, / 32 для IPv4.
користувач1686

3

Це реліквія зі старих часів класного звернення. 127.1означає мережу 127, хост 1. (І так, 127.257це законно, оскільки мережа 127може мати більше 256 хостів.


127.257, зокрема 127.0.1.1, адресу, яку я фактично бачу на старому активаторі сервера KMS, який працював у Windows 8.0
Пол Стеліан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.