[英]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");
}
您可以使用以下代碼驗證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
將返回InterNetwork
for IPv4
或InterNetworkV6
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.