¿Cómo determinas la igualdad entre dos direcciones IPv6?

Tengo una aplicación que permite a los administradores especificar direcciones IP válidas desde las que se pueden realizar solicitudes de servicio web. Simplemente tomo las direcciones IP configuradas y las comparo con la solicitud entrante. Comparar dos direcciones IPv4 es trivial y pensé que comparar dos direcciones IPv6 también lo sería.

Sin embargo, mi ignorancia de redes comenzó a mostrarse cuando noté que las direcciones IPv6 son un poco más complejas. Un problema que noté es que si miro la dirección IP en la máquina (estaba viendo qué consola VMWare mostraba que era la dirección IP) en comparación con la dirección IP de la solicitud web (HttpContext.Current.Request.UserHostAddress dentro de .NET) Noté que uno de ellos terminó en% 10 y otro en% 11:

ipconfig muestra: fe80: 8179: 5576: c6d0: 8b16% 11UserHostAddress muestra: fe80 :: 8179: 5576: c6d0: 8b16% 10

La única diferencia es el% 10 y el% 11, ¿qué da?

También he visto que las direcciones IPv6 terminan en "/" seguidas de 2 dígitos. ¿Debo ignorar estos 3 dígitos finales (si existen) al hacer una comparación? Si es así, ¿cuáles son los finales alternativos válidos que debo buscar?

----------- EDITAR -------------

Aquí está mi solución basada en la respuesta proporcionada ...

Simplemente almaceno una dirección IP "borrada" y la comparo con una dirección IP "borrada". Usando .NET aquí es cómo restriego una dirección IP. No es lo mejor desde el punto de vista del rendimiento, pero funciona. Preferiría simplemente hacer una comparación de laGetAddressBytes() pero estoy usando unDictionary Y me decidí contra el paso extra de crear mi propiaByteComparer.

IPAddress incomingIp = null;
bool ipAddressParsePassed = IPAddress.TryParse(userHostAddress, out incomingIp);
if (ipAddressParsePassed)
{
    IPAddress scrubbedIp = new IPAddress(incomingIp.GetAddressBytes());
    string scrubbedIpStr = scrubbedIp.ToString()
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta