當我嘗試 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。