una tengo son sacar saber reservadas para nombre las estático estructura dirección direcciones direccion definir cuales como activado abrir c# .net ip-address

c# - tengo - direcciones ipv6 reservadas



¿Cómo determinar si una cadena es una dirección IPv4 o IPv6 válida en C#? (7)

Sé que Regex es dangerous para validar direcciones IP debido a las diferentes formas que una dirección IP puede tomar.

He visto preguntas similares para C y C ++, y esas se resolvieron con una función que no existe en C # inet_ntop()

Las soluciones .NET que he encontrado solo manejan el formulario estándar "ddd.ddd.ddd.ddd". ¿Alguna sugerencia?



Puede usar esto para intentar analizarlo:

IPAddress.TryParse

Luego, compruebe AddressFamily que

Devuelve System.Net.Sockets.AddressFamily.InterNetwork para IPv4 o System.Net.Sockets.AddressFamily.InterNetworkV6 para IPv6.

EDITAR: algunos ejemplos de código. cambiar según lo deseado:

string input = "your IP address goes here"; IPAddress address; if (IPAddress.TryParse(input, out address)) { switch (address.AddressFamily) { case System.Net.Sockets.AddressFamily.InterNetwork: // we have IPv4 break; case System.Net.Sockets.AddressFamily.InterNetworkV6: // we have IPv6 break; default: // umm... yeah... I''m going to need to take your red packet and... break; } }


Puede usar la propiedad IPAddress.GetAddressBytes (). Length

IPAddress someIP; if (someIP.GetAddressBytes().Length == 4) { // IPV4 } else (someIP.GetAddressBytes().Length == 16) { // IPV6 } else { // Unknown }

Supongo que debería funcionar


Si no desea analizar todos los números enteros, solo las direcciones IP, simplemente marque . para IPv4 y : para IPv6.

if (input.Contains(".") || input.Contains(":")) { IPAddress address; if (IPAddress.TryParse(input, out address)) { switch (address.AddressFamily) { case AddressFamily.InterNetwork: return Ip4Address; case AddressFamily.InterNetworkV6: return Ip6Address; } } }


Solo una advertencia sobre el uso de System.Net.IpAddress.TryParse() :

Si le pasa una cadena que contiene un entero (por ejemplo, "3"), la función TryParse lo convertirá en "0.0.0.3" y, por lo tanto, una dirección válida de InterNetworkV4. Por lo tanto, como mínimo, el "0.0.0.3" reformateado debe devolverse a la aplicación del usuario para que el usuario sepa cómo se interpretó su entrada.


Una combinación de pruebas aplicadas a una cadena o IPAddress, funciona para mí ...

/// <summary> /// Test string for valid ip address format /// </summary> /// /// <param name="Address">The ip address string</param> /// /// <returns>Returns true if address is a valid format</returns> public static bool IsValidIP(IPAddress Ip) { byte[] addBytes = Ip.GetAddressBytes(); switch (Ip.AddressFamily) { case AddressFamily.InterNetwork: if (addBytes.Length == 4) return true; break; case AddressFamily.InterNetworkV6: if (addBytes.Length == 16) return true; break; default: break; } return false; } /// <summary> /// Test string for valid ip address format /// </summary> /// /// <param name="Address">The ip address string</param> /// /// <returns>Returns true if address is a valid format</returns> public static bool IsValidIP(string Address) { IPAddress ip; if (IPAddress.TryParse(Address, out ip)) { switch (ip.AddressFamily) { case System.Net.Sockets.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 System.Net.Sockets.AddressFamily.InterNetworkV6: if (Address.Contains(":") && Address.Length > 15) return true; break; default: break; } } return false; }


string myIpString = "192.168.2.1"; System.Net.IPAddress ipAddress = null; bool isValidIp = System.Net.IPAddress.TryParse(myIpString, out ipAddress);

Si isValidIp es verdadero, puede verificar ipAddress.AddressFamily para determinar si es IPv4 o IPv6. Es AddressFamily.InterNetwork para IPv4 y AddressFamily.InterNetworkV6 para IPv6.