Bagaimana mungkin 0s yang hilang secara otomatis ditambahkan dalam alamat IP? (`ping 10.5` setara dengan` ping 10.0.0.5`)

36

Saya tidak sengaja mengetik

ssh 10.0.05

dari pada

ssh 10.0.0.5

dan sangat terkejut bahwa itu berhasil. Saya juga mencoba 10.005dan 10.5dan itu juga diperluas secara otomatis ke 10.0.0.5. Saya juga mencoba 192.168.1dan itu berkembang menjadi 192.168.0.1. Semua ini juga bekerja dengan pingbaik daripada ssh, jadi saya curiga ini akan bekerja untuk banyak perintah lain yang terhubung ke host yang disediakan pengguna secara sewenang-wenang.

Mengapa ini bekerja? Apakah perilaku ini didokumentasikan di suatu tempat? Apakah perilaku ini bagian dari POSIX atau sesuatu? Atau hanya implementasi aneh? (Menggunakan Ubuntu 13.10 untuk apa nilainya.)

Nicu Stiurca
sumber

Jawaban:

43

Mengutip dari 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).

Untuk bersenang-senang, coba ini:

$ 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
devnull
sumber
2
Untuk alasannya, menyediakan cara yang lebih berguna untuk merepresentasikan alamat di jaringan kelas A, B, C. Misalnya 127.1 adalah alamat loopback di jaringan loopback kelas 127.0 / 8 yang terdiri dari 16 juta alamat 127.0 hingga 127.0xffffff. Dan pada jaringan 192.168.0 / 16 kelas B, Anda biasanya memiliki alamat 192.168.1 hingga 192.168.65534. Alamat INADDR_ANY adalah 0, alamat broadcast DHCP 0xffffffff yang lebih pendek untuk
diketik
4
Man, saya berharap pengguna akan mencoba http: // 1249767214 sebelum mengajukan pertanyaan sederhana seperti ini.
blahdiblah
21

Menambahkan ke jawaban baik @ devnull , alamat IPv4 dapat direpresentasikan dengan cara berikut.

Contoh

Nama domain ini google.com,, dapat direpresentasikan dengan cara berikut:

  • 74.125.226.4  (desimal bertitik)
  • 1249763844  (desimal datar)
  • 0112.0175.0342.0004  (bertitik oktal)
  • 011237361004  (oktal datar)
  • 0x4A.0x7D.0xE2.0x04  (hex putus-putus)
  • 0x4A7DE204  (hex datar)
  • 74.0175.0xe2.4  (ಠ_ಠ)

Sumber: Mengapa ping 192.168.072 (hanya 2 titik) mengembalikan respons dari 192.168.0.58? .

slm
sumber
3
Mencampur oktal dan desimal adalah pekerjaan iblis.
Nit
4
Dalam arti apa pun, nama domain bukanlah alamat IPv4.
David Conrad
@ Davidvidon - Saya pikir itu agak jelas, karena itu bukan angka. Membuatnya lebih jelas bagi mereka yang tidak tahu tihs.
slm