Dns
什麼是有效的主機名標籤?
我將我的主機名設置為一個數字,其中執行
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
則可以使用。但是你可能會遇到類似的麻煩,因為遲早你會想要省略域名。順其自然並附上一封信,最好是在開頭。