【发布时间】:2015-11-11 00:05:22
【问题描述】:
当我输入字符串“192”并解析字符串时,即使它不是有效的 IPv4 地址,它也会继续返回 IPv4。我尝试添加一个 else if (someIP.GetAddressBytes().Length == 1) 但它仍然返回 IPv4。
IPAddress someIP = IPAddress.Parse("192");
if (someIP.GetAddressBytes().Length == 4)
{
Console.WriteLine("IPv4");
}
else if (someIP.GetAddressBytes().Length == 16)
{
Console.WriteLine("IPv6");
}
else
{
Console.WriteLine("Neither");
}
【问题讨论】:
-
是什么让您认为
192不是有效的IP 地址? -
IPAddress.Parse似乎以与ping.exe类似的方式解析地址 - 请参阅此超级用户关于其他有效 IP 地址表示的回答:superuser.com/a/486936/270560 -
@cubrr 很可能是因为它使用相同的底层代码,也可能符合(IETF?)标准。
-
@DavidG 你是对的,他们使用相同的底层代码。
WSAStringToAddress是他们使用的。关于标准:RFC 791 声明:“地址是四个八位字节(32 位)的固定长度。”。我没有找到关于“有效”地址的任何其他标准,所以我只能假设解析器行为特定于 Windows:msdn.microsoft.com/en-us/library/windows/desktop/… -
这就是为什么它被称为 dotted "notation"。 192.168.1.1 只是 32 位数字的一种表示(人类很容易记住)。任何 32 位数字都可以这样表示,而不仅仅是 IP 地址。
标签: c# ip-address