IPv4和IPv6地址检查程序

时间:2015-11-11 00:05:23

标签: c# ip-address

当我输入字符串" 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");
}

3 个答案:

答案 0 :(得分:2)

您可以使用以下代码验证IPv6IPv4地址:

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;
}

根据documentationIPAddress.AddressFamily将为InterNetwork返回IPv4InterNetworkV6返回IPv6

答案 1 :(得分:0)

MS解析您输入的字符串的方式使其成为有效的IP地址。他们添加了一种处理IP部分的简写,然后填写空白。

如果您查看this页面上的备注部分,您会看到我在谈论的内容。

答案 2 :(得分:0)

IP地址有许多完全有效的表示形式,而不仅仅是0.0.0.0格式。 “192”可能会解析为0.0.0.192,这就是程序没有崩溃的原因以及为什么它的长度为4。

如果您只接受点分表示法,请使用string.Split与int.Parse结合并自己创建一个IPAddress实例。