Чому я можу отримати доступ до сервера за частковою IP-адресою?


10

У своїй мережі у мене є сервер, відомий за IP-адресою 10.0.0.15. Випадково я виявив, що команда: ping 10.0.15призводить до

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

... так правильний сервер відповідає на ping. Навіть коли я намагаюся: ping 10.15я отримую порівняний результат. Також telnet на часткові адреси працює як очікується. Однак SSH не вдається. Чому пакети, надіслані на часткову адресу, надходять на правильний сервер?


це не часткова адреса ... тому заголовок тут трохи вводить в оману ...
Rory Alsop

1
ssh має бути в змозі підключитися до такої адреси (оскільки вона відображає те саме значення, яке фактично передано викликам сокета), але він не визнає ключ хосту як відповідний відомому запису_hosts для 'належної' адреси, при цьому результат залежить від того, як ви (або ваш адміністратор) налаштували перевірку ключів хоста.
dave_thompson_085

Для додаткової розваги над текстовим представленням IP-адрес див. Старіші відповідні відповіді на сервері за замовчуванням: serverfault.com/a/837667/355827
ilkkachu

Відповіді:


18

Це дозволена форма відповідно до inet_aton(3)функцій:

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.

Напр

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

Однак в наші дні, швидше за все, буде краще скористатися getaddrinfoабо використовувати inet_ntopдзвінки для підтримки IPv6. Матеріали "класу В" стали в спадщину ще в 1994 році або приблизно зараз, коли ми маємо CIDR та /24...

Привіт, ви також можете дати це велике старе ціле число (але, будь ласка, не варто)

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

(Це може бути не переносимо до іншого Unix; зокрема OpenBSD не може вирішити 2130706433 ...)


1
Для ще більш цікавого, як слід сказати в наступному параграфі документа (і це робить POSIX), кожне число розбирається як джерело C, де провідний 0означає восьмеричний 0xчи або 0Xозначає шістнадцятковий, тому 010.020.030.040 - це фактично адреса, яка зазвичай пишеться як 8.16.24.32 . Фішери зазвичай робили це, щоб "приховати" ідентифікацію хоста у шкідливих URL-адресах; Я недавно не дивився, щоб побачити, чи все ще вони роблять.
dave_thompson_085
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.