IPv4和IPv6地址检查器
本文关键字:检查 地址 IPv6 IPv4 | 更新日期: 2023-09-27 18:21: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");
}
您可以使用以下代码验证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;
}
根据文档,IPAddress.AddressFamily
将为IPv4
返回InterNetwork
,或为IPv6
返回InterNetworkV6
。
MS解析您输入的字符串的方式使其成为有效的IP地址。他们添加了一种处理IP部分的简写,然后填空。
如果你看看这一页的备注部分,你就会明白我在说什么。
IP地址有许多完全有效的表示形式,而不仅仅是0.0.0.0格式。"192"可能解析为0.0.0.192,这就是程序没有崩溃的原因,也是它的长度为4的原因。
若必须只接受点号表示法,请使用字符串。Split与int相结合。解析并自己创建一个IPAddress实例。