Яким чином відсутні IP-адреси автоматично додаються в IP-адреси? (`ping 10.5` еквівалентно` ping 10.0.0.5`)


36

Я випадково набрав

ssh 10.0.05

замість

ssh 10.0.0.5

і дуже здивувався, що це спрацювало. Я також спробував 10.005і 10.5те, що також автоматично розширилося на 10.0.0.5. Я також спробував, 192.168.1і це розширилося до 192.168.0.1. Все це також працювало, pingа не ssh, тому я підозрюю, що це буде працювати для багатьох інших команд, які підключаються до будь-якого хоста, що надається користувачем.

Чому це працює? Чи десь зафіксована така поведінка? Ця поведінка є частиною POSIX чи щось таке? Або це просто якась дивна реалізація? (Використовуючи Ubuntu 13.10, чого варто.)


2
Ознайомтеся з цим питанням і запитаннями SU: Чому pinging 192.168.072 (лише дві крапки) повертає відповідь з 192.168.0.58?
slm

Відповіді:


43

Цитуючи man 3 inet_aton:

   a.b.c.d   Each of the four numeric parts specifies a byte of the
             address; the bytes are assigned in left-to-right order to
             produce the binary address.

   a.b.c     Parts a and b specify the first two bytes of the binary
             address.  Part c is interpreted as a 16-bit value that
             defines the rightmost two bytes of the binary address.
             This notation is suitable for specifying (outmoded) Class B
             network addresses.

   a.b       Part a specifies the first byte of the binary address.
             Part b is interpreted as a 24-bit value that defines the
             rightmost three bytes of the binary address.  This notation
             is suitable for specifying (outmoded) Class C network
             addresses.

   a         The value a is interpreted as a 32-bit value that is stored
             directly into the binary address without any byte
             rearrangement.

   In all of the above forms, components of the dotted address can be
   specified in decimal, octal (with a leading 0), or hexadecimal, with
   a leading 0X).  Addresses in any of these forms are collectively
   termed IPV4 numbers-and-dots notation.  The form that uses exactly
   four decimal numbers is referred to as IPv4 dotted-decimal notation
   (or sometimes: IPv4 dotted-quad notation).

Для задоволення спробуйте це:

$ nslookup unix.stackexchange.com
Non-authoritative answer:
Name:   unix.stackexchange.com
Address: 198.252.206.140

$ echo $(( (198 << 24) | (252 << 16) | (206 << 8) | 140 ))
3338456716

$ ping 3338456716         # What?  What did we ping just now?
PING stackoverflow.com (198.252.206.140): 48 data bytes
64 bytes from 198.252.206.140: icmp_seq=0 ttl=52 time=75.320 ms
64 bytes from 198.252.206.140: icmp_seq=1 ttl=52 time=76.966 ms
64 bytes from 198.252.206.140: icmp_seq=2 ttl=52 time=75.474 ms

2
Щодо того, це запропонувати більш корисний спосіб представлення адрес у мережах класу A, B, C. Наприклад, 127.1 - це адреса зворотного зв’язку в мережі зворотного зв’язку класу A 127.0 / 8, яка включає 16 мільйонів адрес 127,0 - 127,0xffffff. А в мережі класу В 192.168.0 / 16, як правило, ви матимете адреси 192.168.1 до 192.168.65534. Адреса INADDR_ANY - адреса 0трансляції DHCP 0xffffffff, яка коротша за типом тощо.
Stéphane Chazelas

4
Людина, я хочу, щоб користувачі спробували http: // 1249767214, перш ніж задавати такі прості питання.
blahdiblah

21

Додаючи до точної відповіді @ devnull , адреси IPv4 можна представити наступними способами.

Приклад

Це доменне ім'я, google.comможна представити наступними способами:

  • 74.125.226.4  (пунктир)
  • 1249763844  (плоска десяткова)
  • 0112.0175.0342.0004  (пунктир)
  • 011237361004  (плоский восьмикутник)
  • 0x4A.0x7D.0xE2.0x04  (пунктир)
  • 0x4A7DE204  (плоский шестигранник)
  • 74.0175.0xe2.4  (ಠ_ಠ)

Джерело: Чому pinging 192.168.072 (лише 2 крапки) повертає відповідь з 192.168.0.58? .


3
Змішання восьмеричного і десяткового - це робота чорта.
Ніт

4
Ім’я домену в жодному сенсі не є IPv4 адресою.
Девід Конрад

@DavidConrad - Я вважав, що це було очевидно, оскільки це не числове значення. Зробили це зрозумілішим для тих, хто не знає тих.
slm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.