Ping一个IP地址以不同的IP响应

当我尝试ping IP地址10.10.208.57我没有任何反应,因为在这个IP地址的networking中没有任何东西存在。

但是如果我尝试ping 10.10.208. 0 57而不是另一个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是利盟E120n打印机,这个奇怪的问题的起源可能是什么?

这种行为实际上是由于ping的正常function,与您的实际硬件无关。

事实上,前缀为零的IP地址(或其一部分)将导致该数字被解释为八进制 。

因此, 057表示基数为8的5757 ,因此ping会将ICMP查询发送到位于地址10.10.208.47的机器,从而得到一个答案。

请注意,您也可以使用0x前缀而不是0来pinghex的地址。

编辑:许多评论build议,这个function实际上不是特定于ping ,可以在许多操作IP地址的CLI软件中find。

Ping和许多其他unix程序一样,使用unix系统上的C库进行名称parsing。 其中一个function是inet_aton

inet_aton的手册页说:

在“。”中以“零件”forms提供的所有数字 符号可以是C语言中指定的十进制,八进制或hex(即,前导的0x或0X意味着hex;否则,前导0意味着八进制;否则,该数字被解释为十进制)。

所以当你使用前导零时,数字被解释为八进制。 因此,57 = 047 = 0x39。