Dns

什麼是有效的主機名標籤?

  • February 25, 2011

我將我的主機名設置為一個數字,其中執行hostname給出:

6592

但是當我執行時ping 6592,我得到:

connect: Invalid argument

我檢查了相關的維基百科頁面,它確實說允許這樣的主機名(IIUC)。我錯過了什麼?

RFC 所說的在這裡實際上無關緊要。RFC 指定了在 DNS 級別發生的事情,但如果 ping 沒有首先進行 DNS 查詢,那就沒有實際意義了。當 ping 收到一個全數字參數時,它會將其解釋為 IP 地址。

IPv4 地址在技術上是 32 位數字。它們幾乎總是用點十進製表示法編寫,即所謂的“點四邊形”,如127.0.0.1. 但它們也可以寫成十進製2130706433或十六進制的單個數字0x7f000001

$ ping 2130706433    # 127*2^24 + 1
PING 2130706433 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.027 ms
$ ping 0.0.25.192
connect: Invalid argument

0.0.0.0/8 範圍內的地址保留用作廣播中的源地址。您不能向他們發送數據包,這就是connect(2)返回的原因EINVAL

許多程序,包括大多數 ping 實現,都沒有強制 DNS 查找的選項。如果您創建一個包含全數字子域的本地網路,並且最終得到一個看起來像點分四邊形的有效主機名,您會遇到類似的麻煩。

如果您的本地網路有名稱,ping 6592.mynetwork則可以使用。但是你可能會遇到類似的麻煩,因為遲早你會想要省略域名。順其自然並附上一封信,最好是在開頭。

引用自:https://unix.stackexchange.com/questions/8117