每个人都使它与RFC,IP类等过分复杂。只需运行一些测试以查看ping
命令如何解析用户的IP输入(去除了多余的糠壳):
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
如您所见,该ping
命令(在Windows中)允许您使用不同的IP地址格式。可以将IPv4地址分解为四个部分(“点分四进制”):,A.B.C.D
该ping
命令允许您省略一些内容,并填写以下默认值0
:
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
如果仅提供一个零件,则它小于255(一个八位位组的最大值),则将其视为上述八位位组,但如果大于255,则将其转换并翻转到下一个字段(即mod 256
)。
在某些情况下,例如提供四个以上的部分似乎行不通(例如,ping google.com
的IP不适用于0.74.125.226.4
或74.125.226.4.0
)。
您也可以使用点分四进制和平面形式的十六进制表示法,但是必须通过0x
在每个八位位组前加前缀来格式化它。
因此,有很多方法可以表示(IPv4)IP地址。您可以使用平面或点分四进制(或点分三重,点分双精度,甚至点分单)格式,对于每种格式,您都可以使用(甚至混合和匹配)十进制,八进制和十六进制。例如,您可以google.com
通过以下方式ping通:
google.com
(域名)
74.125.226.4
(点分十进制)
1249763844
(十进制小数)
0112.0175.0342.0004
(点分八进制)
011237361004
(八进制单位)
0x4A.0x7D.0xE2.0x04
(十六进制)
0x4A7DE204
(十六进制)
74.0175.0xe2.4
(ಠ_ಠ)
(感谢没有添加二进制表示法!)
应用范围:
就您而言,ping 192.168.072
使用上表(A.B.0.C
)中的第三种格式,因此您实际上是ping 192.168.0.072
。此外,由于最后一部分的前导零,它被视为八进制,十进制为58。
谜团已揭开。
注意,尽管Windows ping
命令允许输入使用多种格式,并以可见的方式解释非标准格式,但这并不一定意味着您可以在任何地方使用这种格式。某些程序可能会强迫您提供点分四进制的所有四个部分,而其他程序则可能不允许混合和匹配十进制和八进制,依此类推。
同样,IPv6地址进一步使解析逻辑和输入格式的可接受性复杂化。
附录:
syss指出,如果您在其中一个数字中使用了无效字符(例如,使用十六进制模式的an 8
或,9
当使用八进制,a g
等)时,那么ping
足够聪明,可以识别出该字符并将其解释为字符串(-al? -ic?)URL而不是数字IP地址。
(作为一个患有许多动脉瘤和心脏病发作的人,他们试图编写所谓的“简单”代码来适应数据值排列的指数爆炸式增长,我很欣赏,它似乎可以正确地处理所有输入变化;在这种情况下,的情况下,至少3 1 +3 2 +3 3 +3 4 = 120个变化。)
因此,尽管指定010.020.030.040
将按8.16.24.32
预期方式进行ping操作,但将传递010.020.030.080
给ping
URL的方式将其视为URL而不是IP地址,就像foo.bar.baz.com
可能(但遗憾的是不存在)那样。换句话说,它会尝试ping该子域010
的子域020
的域030
在顶级域名080
。但是,由于080
不是有效的TLD(如.com
,.net
和其伙伴),因此连接会在第一步失败。
090.010.010.010
如果无效字符位于不同的八位字节中,也会发生相同的情况。同样,0xf.0xf.0xf.0xf
ping 15.15.15.15
,但0xh1.0x1.0xg0.0f
失败。
哦,好吧,我想这就是您不会流利使用多个数字基础所得到的。
仅确保始终使用4点分四进制(“ 40q”?“ quaaddy-quad”?“ cutie-q”?)地址可能更容易,更安全。
因此,继续学习一些数字基础。您将可以在聚会上炫耀自己,成为聚会的生活,正如他们所说,人们有10种类型:懂二进制的人和不懂二进制的人。
我们什至不用考虑 IPv6地址。我认为它们是111枚海豹之一!