【发布时间】: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
【问题讨论】:
-
ilspy.net 可以帮助您回答很多 WHY 问题。 google.com/search?q=ipaddress+tryparse 在第一次点击时也有一些有趣的阅读。
标签: powershell ip