Bir sunucuya neden kısmi IP adresiyle erişebilirim?


10

Ağımda 10.0.0.15 IP adresi tarafından bilinen bir sunucum var. Kazara, ben komuta keşfetti: ping 10.0.15sonuçlara içinde

64 bytes from 10.0.0.15: icmp_seq=1 ttl=64 time=9.09 ms

... böylece doğru sunucu ping'e yanıt verir. Denediğimde bile: ping 10.15Karşılaştırılabilir bir sonuç elde ediyorum. Ayrıca, kısmi adreslere telnet beklendiği gibi çalışır. Ancak SSH başarısız olur. Kısmi bir adrese gönderilen paketler neden doğru sunucuya geliyor?


kısmi bir adres değil ... bu yüzden başlık burada biraz yanıltıcı ...
Rory Alsop

1
ssh, böyle bir adrese bağlanabilmelidir (çünkü yuva çağrılarına iletilen değerle eşleşir), ancak ana bilgisayar anahtarını 'uygun' adres için bilinen bir_hosts girişiyle eşleştiğini fark etmeyecektir. siz (veya yöneticiniz) ana makine anahtarı denetimini yapılandırdınız.
dave_thompson_085

IP adreslerinin metin gösterimleri hakkında daha fazla eğlence için serverfault
adresindeki

Yanıtlar:


18

inet_aton(3)Docs işlevine göre izin verilen bir formdur :

DESCRIPTION
       inet_aton() converts the Internet host address cp from  the  IPv4  num‐
       bers-and-dots  notation  into  binary  form (in network byte order) and
       stores it in the structure that inp  points  to.   inet_aton()  returns
       nonzero  if the address is valid, zero if not.  The address supplied in
       cp can have one of the following forms:

       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 net‐
                 work 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  rearrange‐
                 ment.

Örneğin

$ perl -MSocket=inet_aton,inet_ntoa -E 'say inet_ntoa(inet_aton("10.0.15"))'
10.0.0.15
$ perl -MSocket=inet_aton,inet_ntoa -E 'say inet_ntoa(inet_aton("10.15"))'
10.0.0.15
$ 

Ancak bu günlerde IPv6 desteğini kullanmak getaddrinfoveya inet_ntopçağırmak daha iyi olacaktır . "Sınıf B" şeyler 1994 yılında eski haline geldi ya da şimdi CIDR var ve /24...

Hey, buna büyük bir eski tam sayı da verebilirsiniz (ama lütfen yapma)

$ perl -MSocket=inet_aton,inet_ntoa -E 'say inet_ntoa(inet_aton("2130706433"))'
127.0.0.1
$ getent hosts 2130706433
127.0.0.1       2130706433
$ ssh 2130706433
The authenticity of host '2130706433 (127.0.0.1)' can't be established.
...

(Bu diğer unixlere taşınabilir olmayabilir; özellikle OpenBSD 2130706433'ü çözemez ...)


1
Daha da eğlenceli olması için, dokümanın bir sonraki parasının dediği gibi (ve POSIX'in yaptığı gibi), her sayı önde 0gelen oktal ve / 0xveya 0Xhex anlamına gelen C kaynağı gibi ayrıştırılır , bu nedenle 010.020.030.040 aslında 8.16.24.32 olarak yazılan adrestir. . Kimlik avcıları bunu kötü amaçlı URL'lerde ana bilgisayar kimliğini 'gizlemek' için yaparlardı; Son zamanlarda hala yaptıklarını görmek için bakmadım.
dave_thompson_085
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.