IP 주소를 ping하면 다른 IP로 응답합니다.

IP 주소를 ping하면 다른 IP로 응답합니다.

IP 주소를 ping하려고 하면 10.10.208.57해당 IP 주소를 가진 네트워크에 아무것도 없기 때문에 응답이 없습니다.

그러나 ping을 시도하면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

Lexmark E120n 프린터를 고려하면 10.10.208.47이 이상한 문제의 원인은 무엇일까요?

답변1

이러한 동작은 실제로 ping의 일반적인 기능으로 인한 것이며 실제 하드웨어와는 관련이 없습니다.

실제로 IP 주소(또는 그 일부) 앞에 0을 붙이면 숫자가 다음과 같이 해석됩니다.8진수.

따라서 8진법은 47을 057의미합니다 . 따라서 핑은57ICMP주소에 있는 기계에 질의하여 10.10.208.47응답을 얻습니다.

0 대신 0x 접두사를 사용하여 16진수로 주소를 ping할 수도 있습니다.

편집: 많은 의견에서 알 수 있듯이 이 기능은 실제로 pingIP 주소를 조작하는 많은 CLI 소프트웨어에만 국한되지 않으며 찾을 수 있습니다.

답변2

다른 많은 유닉스 프로그램과 마찬가지로 Ping은 이름 확인을 위해 유닉스 시스템의 C 라이브러리를 사용합니다. 사용되는 기능 중 하나는 입니다 inet_aton.

매뉴얼 페이지는 다음과 같이 inet_aton말합니다.

모든 숫자는 `.'에서 ``부분''으로 제공됩니다. 표기법은 C 언어에 지정된 대로 10진수, 8진수 또는 16진수일 수 있습니다(즉, 앞에 오는 0x 또는 0X는 16진수를 의미합니다. 그렇지 않으면 앞에 0이 8진수를 의미하고, 그렇지 않으면 숫자는 10진수로 해석됩니다).

따라서 앞에 0을 사용하면 숫자는 8진수로 해석됩니다. 따라서 57 = 047 = 0x39입니다.

관련 정보