为什么System.Net.IpAddress
允许将以下字符串转换为有效的 IP 地址吗?
$b = [ipaddress]"10.10.10"
$b.IPAddressToString
#10.10.0.10
$c = [ipaddress]"10.10"
$c.IPAddressToString
#10.0.0.10
$d = [ipaddress]"10"
$d.IPAddressToString
#0.0.0.10
我可以看到该模式是字符串中的最后一个八位字节是字符串中的最后一个八位字节IPAddress
对象,无论字符串中的第一个八位字节是什么,都将用作字符串中最左边的八位字节IPAddress
,并且使用零填充中间未指定的八位字节(如果有)。
但它为什么要这样做呢?作为用户,我预计它会在转换过程中失败,除非指定了所有八位字节。
由于它允许这些转换,因此在检查字符串是否为有效 IP 地址时可能会出现如下意外结果:
[bool]("10" -as [ipaddress]) #Outputs True
根据
ipString 中的部分数量(每个部分由句点分隔)决定了 IP 地址的构造方式。一份地址直接存储在网络地址中。两部分地址,方便指定 A 类地址,将前导部分放在第一个字节中,将尾随部分放在网络地址的最右边的三个字节中。三部分地址为了方便指定 B 类地址,将第一部分放在第一个字节中,第二部分放在第二个字节中,最后部分放在网络地址最右边的两个字节中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)