Warum kann ich über eine teilweise IP-Adresse auf einen Server zugreifen?

10

In meinem Netzwerk habe ich einen Server, der unter der IP-Adresse 10.0.0.15 bekannt ist. Durch Zufall habe ich festgestellt, dass der Befehl: ping 10.0.15resultiert

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

... damit der richtige Server auf den Ping reagiert. Auch wenn ich es versuche: ping 10.15Ich bekomme ein vergleichbares Ergebnis. Außerdem funktioniert Telnet zu den Teiladressen wie erwartet. SSH schlägt jedoch fehl. Warum kommen an eine Teiladresse gesendete Pakete am richtigen Server an?

wie5Ooma
quelle
Es ist keine Teiladresse ... daher ist der Titel hier etwas irreführend ...
Rory Alsop
1
ssh sollte in der Lage sein, eine Verbindung zu einer solchen Adresse herzustellen (da es demselben Wert zugeordnet ist, der tatsächlich an Socket-Aufrufe übergeben wurde), erkennt jedoch nicht, dass der Host-Schlüssel mit einem Eintrag von unknown_hosts für die 'richtige' Adresse übereinstimmt, wobei das Ergebnis davon abhängt, wie Sie (oder Ihr Administrator) haben die Überprüfung des Hostschlüssels konfiguriert.
Dave_thompson_085
Weitere Informationen zu Textdarstellungen
ilkkachu

Antworten:

18

Das ist eine erlaubte Form gemäß den inet_aton(3)Funktionsdokumenten:

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.

Z.B

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

Heutzutage ist es jedoch wahrscheinlich besser, stattdessen die getaddrinfooder inet_ntopAufrufe für IPv6-Unterstützung zu verwenden. Das Zeug der "Klasse B" wurde 1994 oder so zum Vermächtnis, jetzt, wo wir CIDR und /24...

Hey, du kannst ihm auch eine große alte ganze Zahl geben (aber bitte nicht)

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

(Dies ist möglicherweise nicht auf ein anderes Unix portierbar. Insbesondere OpenBSD kann 2130706433 nicht auflösen ...)

Thrig
quelle
1
Für noch mehr Spaß, wie der nächste Absatz des Dokuments sagen sollte (und POSIX), wird jede Zahl wie eine C-Quelle analysiert, wobei führend 0Oktal und / 0xoder 0XHex bedeutet. 010.020.030.040 ist also die Adresse, die normalerweise als 8.16.24.32 geschrieben wird . Phisher haben dies getan, um die Hostidentität in schädlichen URLs zu "verbergen". Ich habe in letzter Zeit nicht nachgesehen, ob sie es noch tun.
Dave_thompson_085