我将我的主机名设置为一个数字,其中运行hostname
给出:
6592
Run Code Online (Sandbox Code Playgroud)
但是当我运行时ping 6592
,我得到:
connect: Invalid argument
Run Code Online (Sandbox Code Playgroud)
我检查了相关的维基百科页面,它确实说允许这样的主机名(IIUC)。我错过了什么?
Gil*_*il' 13
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
Run Code Online (Sandbox Code Playgroud)
0.0.0.0/8 范围内的地址被保留用作广播中的源地址。您无法向他们发送数据包,这就是为什么connect(2)
返回EINVAL
.
许多程序,包括大多数 ping 实现,都没有强制 DNS 查找的选项。如果您创建一个包含全数字子域的本地网络,并最终得到一个看起来像点四边形的有效主机名,您会遇到类似的问题。
如果您的本地网络有名称,ping 6592.mynetwork
将起作用。但是您很可能会遇到类似的麻烦,因为您迟早会想要省略域名。顺其自然,包括一个字母,最好在开头。
归档时间: |
|
查看次数: |
6662 次 |
最近记录: |