繁体   English   中英

IPv4 和 IPv6 地址检查器

[英]IPv4 and IPv6 address checker

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

您可以使用以下代码验证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;
}

根据文档IPAddress.AddressFamily将返回InterNetwork for IPv4InterNetworkV6 for IPv6

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

如果您查看页面上的备注部分,您就会明白我在说什么。

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

如果您必须只接受点分符号,请将 string.Split 与 int.Parse 结合使用并自己创建一个 IPAddress 实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM