Perché posso accedere a un server con un indirizzo IP parziale?


10

Nella mia rete ho un server noto con l'indirizzo IP 10.0.0.15. Per caso, ho scoperto che il comando: ping 10.0.15risulta in

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

... quindi il server corretto risponde al ping. Anche quando provo: ping 10.15ottengo un risultato comparabile. Inoltre, telnet agli indirizzi parziali funziona come previsto. Tuttavia, SSH non riesce. Perché i pacchetti inviati a un indirizzo parziale arrivano al server corretto?


non è un indirizzo parziale ... quindi qui il titolo è un po 'fuorviante ...
Rory Alsop,

1
ssh dovrebbe essere in grado di connettersi a tale indirizzo (perché si associa allo stesso valore effettivamente passato alle chiamate socket) ma non riconoscerà la chiave host come corrispondente a una voce known_hosts per l'indirizzo 'corretto', con risultati a seconda di come tu (o il tuo amministratore) avete configurato il controllo della chiave host.
dave_thompson_085,

Per ulteriore divertimento sulle rappresentazioni testuali degli indirizzi IP, vedi la mia risposta precedente e correlata su serverfault: serverfault.com/a/837667/355827
ilkkachu,

Risposte:


18

Questo è un modulo consentito in base ai inet_aton(3)documenti di funzione:

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.

Per esempio

$ 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
$ 

Tuttavia in questi giorni sarebbe probabilmente meglio utilizzare invece il getaddrinfoo inet_ntoprichiede il supporto IPv6. La roba "Classe B" è diventata eredità nel 1994 o giù di lì adesso che abbiamo CIDR e /24...

Ehi, puoi anche dargli un grande numero intero (ma per favore non farlo)

$ 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.
...

(Potrebbe non essere portabile su altri unix; in particolare OpenBSD non è in grado di risolvere 2130706433 ...)


1
Per un divertimento ancora maggiore, come dovrebbe dire il prossimo paragrafo del documento (e POSIX), ogni numero viene analizzato come sorgente C dove leader 0significa ottale 0xeo 0Xsignifica esadecimale, quindi 010.020.030.040 è in realtà l'indirizzo solitamente scritto come 8.16.24.32 . I phisher lo facevano per "nascondere" l'identità dell'host negli URL malevoli; Non ho guardato di recente per vedere se lo fanno ancora.
dave_thompson_085,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.