IP 주소를 Ping하면 다른 IP로 응답


21

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 프린터라는 것을 고려하면 이 이상한 문제의 원인은 무엇입니까?


3
범프,이 글의 답변을 봐 : superuser.com/questions/486788/...
마이클 Sokolowski

답변:


43

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

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

그래서 057수단 57기수 8 이는 47 따라서 핑이 보낼 것입니다 ICMP의 주소에있는 컴퓨터에 쿼리를 10.10.208.47그것에서 답을 얻을 그러므로합니다.

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

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


우와! 고맙습니다! 내 마음은 몇 분 동안 멈췄다 :-)
PsyStyle

4
핑뿐만 아니라 많은 일들이 그렇게합니다.
Jenny D는 Reinstate Monica가


15

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

에 대한 매뉴얼 페이지는 inet_aton말합니다 :

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

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


나는 심지어 Windows조차도 똑같이 행동한다는 것을 알았습니다. 자세한 답변 감사합니다!
PsyStyle

@PsyStyle 천만에요! 광범위한 운영 체제 및 프로그래밍 언어에서 숫자에 대한 표준 표기법입니다.
Jenny D는 Monica Reinstate Monica가

"따라서 앞에 0을 사용하면 숫자는 10 진수로 해석됩니다." 나는 이것이 오타라고 생각합니다. 8 진수로 해석 했습니까?
Cruncher

1
감사합니다 @Cruncher. 나는 카페인 스트림에서 너무 높은 농도의 혈액을 비난합니다.
Jenny D는 Monica Reinstate Monica가
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.