Dlaczego mogę uzyskać dostęp do serwera za pomocą częściowego adresu IP?


10

W mojej sieci mam serwer znany pod adresem IP 10.0.0.15. Przez przypadek odkryłem, że polecenie: ping 10.0.15powoduje

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

... więc właściwy serwer odpowiada na ping. Nawet kiedy próbuję: ping 10.15otrzymuję porównywalny wynik. Ponadto telnet na adresy częściowe działa zgodnie z oczekiwaniami. Jednak SSH nie działa. Dlaczego pakiety wysyłane na częściowy adres docierają na właściwy serwer?


to nie jest częściowy adres ... więc tytuł jest tu trochę mylący ...
Rory Alsop

1
ssh powinien być w stanie połączyć się z takim adresem (ponieważ jest odwzorowywany na tę samą wartość, która faktycznie została przekazana do wywołań gniazd), ale nie rozpozna klucza hosta jako pasującego do wpisu znanego_hosta dla „właściwego” adresu, z wynikiem zależnym od tego, jak Ty (lub Twój administrator) skonfigurowałeś sprawdzanie klucza hosta.
dave_thompson_085

Aby uzyskać dodatkową zabawę w przypadku tekstowych reprezentacji adresów IP, zobacz moją starszą, pokrewną odpowiedź na serverfault.com: serverfault.com/a/837667/355827
ilkkachu

Odpowiedzi:


18

Jest to dozwolona forma zgodnie z inet_aton(3)dokumentacją funkcji:

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.

Na przykład

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

Jednak w dzisiejszych czasach prawdopodobnie lepiej byłoby użyć getaddrinfolub inet_ntopwzywa do obsługi IPv6. Materiał „klasy B” stał się dziedzictwem mniej więcej w 1994 roku, teraz gdy mamy CIDR i /24...

Hej, możesz też nadać mu dużą starą liczbę całkowitą (ale proszę nie)

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

(To może nie być przenośne na inny uniks; w szczególności OpenBSD nie może rozwiązać 2130706433 ...)


1
Dla jeszcze większej zabawy, jak powinien powiedzieć następny akapit dokumentu (i POSIX robi), każda liczba jest analizowana jak źródło C, gdzie wiodące 0oznacza ósemkowe i / 0xlub 0Xszesnastkowe, więc 010.020.030.040 to w rzeczywistości adres zwykle zapisany jako 8.16.24.32 . Phisherzy robili to w celu „ukrycia” tożsamości hosta w złośliwych adresach URL; Nie szukałem ostatnio, czy nadal tak jest.
dave_thompson_085
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.