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

时间:2016-10-12 00:13:59

标签: powershell ip

为什么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对象中的最后一个八位字节,无论字符串中的第一个八位字节是什么,都被用作{中最左边的八位字节{1}},并且零用于填充中间未指定的八位字节(如果有)。

但为什么会这样呢?作为用户,我希望它在转换期间失败,除非指定了所有八位字节。 因为它允许这些转换,所以在检查字符串是否是有效的IP地址时,可能会出现意外结果:

IPAddress

1 个答案:

答案 0 :(得分:4)

根据https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx?f=255&MSPPError=-2147217396

ipString中的部分数量(每个部分用句点分隔)决定了IP地址的构造方式。单部分地址直接存储在网络地址中。 两部分地址,便于指定A类地址,将前导部分放在网络地址的最右边三个字节的第一个字节和尾部中。一个三部分地址,便于指定B类地址,将第一部分放在第一个字节中,第二部分放在第二个字节中,最后一部分放在网络地址的最右边两个字节中。