IP adreslerine eksik 0'ların otomatik olarak eklenmesi nasıldır? (`ping 10.5`, ping 10.0.0.5’a eşittir)


36

Yanlışlıkla yazdım

ssh 10.0.05

yerine

ssh 10.0.0.5

ve işe yaradığı için çok şaşırdım. Ben de denedim 10.005ve 10.5bunlar da otomatik olarak genişledi 10.0.0.5. Ben de denedim 192.168.1ve genişledim 192.168.0.1. Bunların hepsi de bunun pingyerine çalıştı ssh, bu yüzden keyfi bir kullanıcı tarafından sağlanan ana bilgisayara bağlanan diğer birçok komut için de işe yarayacağından şüpheleniyorum.

Bu neden işe yarıyor? Bu davranış bir yere mi belgeleniyor? Bu davranış POSIX'in bir parçası mı? Yoksa sadece garip bir uygulama mı? (Değeri için Ubuntu 13.10 kullanmak.)



Yanıtlar:


43

Gönderen 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).

Eğlenmek için şunu deneyin:

$ 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
Neden olarak, A, B, C sınıflarındaki adresleri temsil etmek için daha kullanışlı bir yol sunmak. Örneğin 127.1, 16 milyon adres 127.0 ila 127.0xffffff içeren 127.0 / 8 A sınıfı geridöngü ağında geridöngü adresidir. Ve 192.168.0 / 16 B sınıfı ağda, genellikle 192.168.1 - 192.168.65534 adreslerine sahip olursunuz. INADDR_ANY adresidir 0kısadır DHCP yayın adresi 0xffffffff vb yazmak için,
Stéphane Chazelas

4
Dostum, kullanıcıların basit sorular sormadan önce http: // 1249767214'ü deneyebilmelerini diliyorum .
blahdiblah

21

@ Devnull'ın ince cevabını ekleyerek , IPv4 adresleri aşağıdaki şekillerde gösterilebilir.

Örnek

Bu etki alanı adı google.comaşağıdaki şekillerde gösterilebilir:

  • 74.125.226.4  (noktalı ondalık)
  • 1249763844  (düz ondalık)
  • 0112.0175.0342.0004  (noktalı sekizlik)
  • 011237361004  (yassı sekizli)
  • 0x4A.0x7D.0xE2.0x04  (noktalı altıgen)
  • 0x4A7DE204  (düz altıgen)
  • 74.0175.0xe2.4  (ಠ_ಠ)

Kaynak: Neden 192.168.072 (yalnızca 2 nokta) ping işlemi 192.168.0.58'den bir yanıt döndürüyor? .


3
Sekizli ve ondalık basamakları karıştırmak şeytanın işidir.
Nit

4
Bir alan adı hiçbir şekilde bir IPv4 adresi değildir.
David Conrad

@DavidConrad - Sayısal olmadığı için bunun açık olduğunu düşündüm. Tihs bilmeyenler için daha net yaptı.
slm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.