IP 주소를 핑하려고하면 10.10.208.57
해당 IP 주소를 가진 네트워크에 아무것도 없기 때문에 응답이 없습니다.
나는 핑하려고하지만 경우에 10.10.208.
057
대신에 다른 IP 주소의 응답 :
root@everest:/root# ping 10.10.208.057
PING 10.10.208.057 (10.10.208.47) 56(84) bytes of data.
64 bytes from 10.10.208.47: icmp_seq=1 ttl=253 time=0.732 ms
64 bytes from 10.10.208.47: icmp_seq=2 ttl=253 time=0.695 ms
64 bytes from 10.10.208.47: icmp_seq=3 ttl=253 time=0.659 ms
64 bytes from 10.10.208.47: icmp_seq=4 ttl=253 time=0.705 ms
10.10.208.47
이것이 Lexmark E120n 프린터라는 것을 고려하면 이 이상한 문제의 원인은 무엇입니까?
답변
이 동작은 실제로 일반적인 Ping 기능으로 인한 것이며 실제 하드웨어와 관련이 없습니다.
실제로 IP 주소 (또는 그 일부) 앞에 0을 붙이면 숫자가 8 진수 로 해석됩니다 .
그래서 057
수단 57
기수 8 이는 47 따라서 핑이 보낼 것입니다 ICMP의 주소에있는 컴퓨터에 쿼리를 10.10.208.47
그것에서 답을 얻을 그러므로합니다.
0 대신 0x 접두사를 사용하여 16 진수로 주소를 핑할 수도 있습니다.
편집 : 많은 의견에서 알 수 있듯이이 기능은 실제로 ping
IP 주소를 조작하는 많은 CLI 소프트웨어에서 특정되지 않으며 찾을 수 있습니다.
답변
다른 많은 유닉스 프로그램과 마찬가지로 Ping은 유닉스 시스템의 C 라이브러리를 사용하여 이름을 확인합니다. 사용되는 기능 중 하나는 inet_aton
입니다.
에 대한 매뉴얼 페이지는 inet_aton
말합니다 :
`. ‘에서“부품’ ‘으로 제공되는 모든 숫자 표기법은 C 언어에 지정된 10 진수, 8 진수 또는 16 진수 일 수 있습니다 (즉, 선행 0x 또는 0X는 16 진수를 의미하고, 그렇지 않으면 선행 0은 8 진수를 의미하고 그렇지 않으면 숫자는 10 진수로 해석 됨).
따라서 선행 0을 사용하면 숫자는 8 진수로 해석됩니다. 따라서 57 = 047 = 0x39입니다.