为什么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
Run Code Online (Sandbox Code Playgroud)
我可以看到模式是字符串中的最后一个八位字节是IPAddress对象中的最后一个八位字节,无论字符串中的第一个八位字节是什么,都用作 中最左边的八位字节IPAddress,并使用零填充中间未指定的八位字节,如果有的话。
但它为什么要这样做呢?作为用户,除非指定了所有八位字节,否则我希望它在转换过程中失败。因为它允许这些转换,所以在检查字符串是否是有效的 IP 地址时可能会出现这样的意外结果:
[bool]("10" -as [ipaddress]) #Outputs True
Run Code Online (Sandbox Code Playgroud)
    根据https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx?f=255&MSPPError=-2147217396
ipString 中的部分数量(每个部分由句点分隔)决定了 IP 地址的构造方式。一部分地址直接存储在网络地址中。一个由两部分组成的地址,便于指定 A 类地址,将前导部分放在网络地址的第一个字节中,将尾随部分放在最右边的三个字节中。一个三部分地址,方便指定 B 类地址,将第一部分放在第一个字节中,第二部分放在第二个字节中,最后一部分放在网络地址最右边的两个字节中。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           696 次  |  
        
|   最近记录:  |