Tại sao tôi có thể truy cập máy chủ bằng địa chỉ IP một phần?


10

Trong mạng của tôi, tôi có một máy chủ được biết đến bởi địa chỉ IP 10.0.0.15. Tình cờ, tôi phát hiện ra rằng lệnh: ping 10.0.15kết quả là

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

... Vì vậy, máy chủ chính xác đáp ứng ping. Ngay cả khi tôi cố gắng: ping 10.15tôi nhận được một kết quả tương đương. Ngoài ra, telnet đến các địa chỉ một phần hoạt động như mong đợi. Tuy nhiên, SSH thất bại. Tại sao các gói được gửi đến một địa chỉ một phần đến đúng máy chủ?


nó không phải là một địa chỉ một phần ... vì vậy tiêu đề hơi sai lệch ở đây ...
Rory Alsop

1
ssh sẽ có thể kết nối với một địa chỉ như vậy (vì nó ánh xạ tới cùng một giá trị thực sự được truyền cho các cuộc gọi socket) nhưng nó sẽ không nhận ra khóa máy chủ là khớp với mục nhập được biết đến cho địa chỉ 'thích hợp', với kết quả tùy thuộc vào cách bạn (hoặc quản trị viên của bạn) đã cấu hình kiểm tra khóa máy chủ.
dave_thndry_085

Để có thêm niềm vui về cách trình bày văn bản của địa chỉ IP, hãy xem câu trả lời cũ hơn, có liên quan của tôi trên serverfault: serverfault.com/a/837667/355827
ilkkachu

Câu trả lời:


18

Đó là một hình thức được phép theo các inet_aton(3)tài liệu chức năng:

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.

Ví dụ

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

Tuy nhiên, những ngày này có thể tốt hơn là thay vào đó sử dụng getaddrinfohoặc inet_ntopgọi hỗ trợ IPv6. Công cụ "Lớp B" đã trở thành di sản từ năm 1994 hoặc lâu hơn khi chúng ta có CIDR và /24...

Này, bạn cũng có thể cung cấp cho nó một số nguyên cũ lớn (nhưng vui lòng không)

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

(Điều này có thể không được chuyển sang unix khác; cụ thể là OpenBSD không thể giải quyết 2130706433 ...)


1
Để vui hơn nữa, vì đoạn tiếp theo của tài liệu sẽ nói (và POSIX cũng vậy), mỗi số được phân tích cú pháp như nguồn C trong đó hàng đầu 0có nghĩa là bát phân và 0xhoặc 0Xcó nghĩa là hex, vì vậy 010.020.030.040 thực sự là địa chỉ thường được viết là 8.16.24.32 . Những kẻ lừa đảo thường làm điều này để 'ẩn' danh tính chủ nhà trong các URL độc hại; Tôi đã không nhìn gần đây để xem nếu họ vẫn làm.
dave_thndry_085
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.