부분 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 10.15비슷한 결과를 얻습니다. 또한 부분 주소에 대한 텔넷이 예상대로 작동합니다. 그러나 SSH는 실패합니다. 부분 주소로 전송 된 패킷이 올바른 서버에 도착하는 이유는 무엇입니까?


그것은 부분적인 주소가 아니기 때문에 제목이 약간 오해의 소지가 있습니다.
Rory Alsop

1
ssh는 이러한 주소에 연결할 수 있어야합니다 (실제로 소켓 호출에 전달 된 것과 동일한 값으로 매핑되기 때문에). 호스트 키를 '적절한'주소에 대해 known_hosts 항목과 일치하는 것으로 인식하지 못합니다. 귀하 (또는 귀하의 관리자)가 호스트 키 검사를 구성했습니다.
dave_thompson_085

IP 주소의 텍스트 표현에 대한 자세한 내용은 serverfault에 대한 이전의 관련 답변을 참조하십시오. serverfault.com/a/837667/355827
ilkkachu

답변:


18

그것은 inet_aton(3)docs 함수 에 따라 허용되는 형식입니다 .

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
$ 

그러나 요즘에는 IPv6 지원을 위해 getaddrinfo또는 inet_ntop호출을 사용하는 것이 좋습니다 . "클래스 B"는 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.
...

(이것은 다른 유닉스에 이식 가능하지 않을 수 있습니다; 특히 OpenBSD는 2130706433을 해결할 수 없습니다 ...)


1
더욱 재미로에게 최고의 경우, 각 번호는 C 소스와 같은 구문 분석 된 문서의 다음 파라는 말을한다 (그리고 POSIX는 않습니다) 0수단는 8 진수와 0x0X, 이렇게 010.020.030.040 실제로 보통 8.16.24.32으로 기록 된 주소의 의미 진수 . 피셔는이를 악의적 인 URL에서 호스트 ID를 '숨기기'위해이 작업을 수행했습니다. 나는 그들이 아직도 있는지 확인하기 위해 최근에 보지 않았습니다.
dave_thompson_085
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.