IPv4 和 IPv6 地址检查器
IPv4 and IPv6 address checker
当我输入字符串“192”并解析该字符串时,它会继续 return IPv4,即使它不是有效的 IPv4 地址。我尝试添加一个 else if (someIP.GetAddressBytes().Length == 1) 但它仍然是 returns 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");
}
MS 解析您输入的字符串的方式使其成为有效的 IP 地址。他们添加了一种 shorthand 来处理 IP 的一部分,然后填充空白。
如果你查看 this 页面上的备注部分,你就会明白我在说什么。
除了 0.0.0.0 格式之外,还有许多完全有效的 IP 地址表示形式。 “192”可能解析为 0.0.0.192,这就是程序没有崩溃的原因以及它的长度为 4 的原因。
如果您必须只接受点分符号,请使用 string.Split 结合 int.Parse 并自己创建一个 IPAddress 实例。
您可以使用以下代码来验证 IPv6
和 IPv4
地址:
public static bool IsValidIP(string address)
{
IPAddress ip;
if (!IPAddress.TryParse(address, out ip)) return false;
switch (ip.AddressFamily)
{
case AddressFamily.InterNetwork:
if (address.Length > 6 && address.Contains("."))
{
string[] s = address.Split('.');
if (s.Length == 4 && s[0].Length > 0 && s[1].Length > 0 && s[2].Length > 0 && s[3].Length > 0)
return true;
}
break;
case AddressFamily.InterNetworkV6:
if (address.Contains(":") && address.Length > 15)
return true;
break;
}
return false;
}
根据 documentation,IPAddress.AddressFamily
将 return InterNetwork
用于 IPv4
或 InterNetworkV6
用于 IPv6
。
当我输入字符串“192”并解析该字符串时,它会继续 return IPv4,即使它不是有效的 IPv4 地址。我尝试添加一个 else if (someIP.GetAddressBytes().Length == 1) 但它仍然是 returns 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");
}
MS 解析您输入的字符串的方式使其成为有效的 IP 地址。他们添加了一种 shorthand 来处理 IP 的一部分,然后填充空白。
如果你查看 this 页面上的备注部分,你就会明白我在说什么。
除了 0.0.0.0 格式之外,还有许多完全有效的 IP 地址表示形式。 “192”可能解析为 0.0.0.192,这就是程序没有崩溃的原因以及它的长度为 4 的原因。
如果您必须只接受点分符号,请使用 string.Split 结合 int.Parse 并自己创建一个 IPAddress 实例。
您可以使用以下代码来验证 IPv6
和 IPv4
地址:
public static bool IsValidIP(string address)
{
IPAddress ip;
if (!IPAddress.TryParse(address, out ip)) return false;
switch (ip.AddressFamily)
{
case AddressFamily.InterNetwork:
if (address.Length > 6 && address.Contains("."))
{
string[] s = address.Split('.');
if (s.Length == 4 && s[0].Length > 0 && s[1].Length > 0 && s[2].Length > 0 && s[3].Length > 0)
return true;
}
break;
case AddressFamily.InterNetworkV6:
if (address.Contains(":") && address.Length > 15)
return true;
break;
}
return false;
}
根据 documentation,IPAddress.AddressFamily
将 return InterNetwork
用于 IPv4
或 InterNetworkV6
用于 IPv6
。