当我尝试 ping 该 IP 地址时,10.10.208.57
没有得到任何响应,因为网络中不存在具有该 IP 地址的任何事物。
但是如果我尝试 ping10.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 打印机,这个奇怪问题的根源是什么?
答案1
答案2
与许多其他 unix 程序一样,Ping 使用 unix 系统上的 C 库进行名称解析。使用的函数之一是inet_aton
。
的手册页inet_aton
显示:
按照 C 语言的规定,在 `.' 表示法中作为 `` 部分 '' 提供的所有数字可以是十进制、八进制或十六进制(即,前导 0x 或 0X 表示十六进制;否则,前导 0 表示八进制;否则,该数字将被解释为十进制)。
因此,当您使用前导零时,该数字将被解释为八进制。因此,57 = 047 = 0x39。