Ping 一個 IP 位址會得到不同的 IP 回應

Ping 一個 IP 位址會得到不同的 IP 回應

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

該行為實際上是由於 ping 的正常功能造成的,與您的實際硬體無關。

事實上,在 IP 位址(或其一部分)前面加上前導零將導致該數字被解釋為八進位

所以057意味著57以 8 為基數,即 47。ICMP查詢位於地址的機器10.10.208.47,並從中得到答案。

請注意,您也可以使用 0x 前綴而不是僅使用 0 來 ping 十六進位位址。

編輯:正如許多評論所暗示的那樣,此功能實際上並不特定於,ping並且可以在許多操作 IP 位址的 CLI 軟體中找到。

答案2

與許多其他 UNIX 程式一樣,Ping 使用 UNIX 系統上的 C 函式庫進行名稱解析。使用的函數之一是inet_aton.

的手冊頁inet_aton說:

所有數字均以“.”中的“部分”形式提供符號可以是十進制、八進製或十六進制,如 C 語言中指定的那樣(即,前導 0x 或 0X 表示十六進制;否則,前導 0 表示八進制;否則,該數字被解釋為十進制)。

因此,當您使用前導零時,該數字將被解釋為八進位。因此,57 = 047 = 0x39。

相關內容