【问题标题】:Converting a partial IP address string to an IP address object将部分 IP 地址字符串转换为 IP 地址对象
【发布时间】:2016-10-12 11:39:29
【问题描述】:

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

【问题讨论】:

标签: powershell ip


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 2011-02-25
    • 2023-03-05
    相关资源
    最近更新 更多