IPv4 and IPv6 address checker
当我输入字符串"192"并解析该字符串时,它会继续返回IPv4,即使它不是有效的IPv4地址。我尝试添加一个else if(someip.getAddressBytes().length==1),但它仍然返回ipv4。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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"); } |
您可以使用以下代码验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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; } |
根据文件,
IP地址有许多完全有效的表示形式,而不仅仅是0.0.0.0格式。"192"可能解析为0.0.0.192,这就是程序没有崩溃的原因,也是它的长度为4的原因。
如果必须只接受点符号,请使用string.split和int.parse并自己创建一个ipaddress实例。
MS解析您输入的字符串的方式使其成为有效的IP地址。他们添加了一种处理部分IP的简写,然后填写空白。
如果你看一下这一页的评论部分,你就会明白我在说什么。