将部分IP地址字符串转换为IP地址对象

5
为什么 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

http://ilspy.net/ 可以帮助您回答很多“为什么”的问题。https://www.google.com/search?q=ipaddress+tryparse 在第一个搜索结果中也有一些有趣的阅读材料。 - No Refunds No Returns
1个回答

6
根据https://msdn.microsoft.com/zh-cn/library/system.net.ipaddress.parse.aspx?f=255&MSPPError=-2147217396
ipString中的部分数量(每个部分由句点分隔)决定了IP地址的构造方式。一个部分地址直接存储在网络地址中。方便指定A类地址的两部分地址将前导部分放在第一个字节中,将尾部部分放在网络地址的最右三个字节中。方便指定B类地址的三部分地址将第一部分放在第一个字节中,将第二部分放在第二个字节中,并将最后一部分放在网络地址的最右两个字节中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接