Como você determina a igualdade entre dois endereços IPv6?

Eu tenho um aplicativo que permite aos administradores especificar endereços IP válidos a partir dos quais as solicitações de serviços da web podem ser feitas. Eu simplesmente pego os endereços IP configurados e os comparo com o pedido recebido. Comparando dois endereços IPv4 é trivial e eu pensei que comparar dois endereços IPv6 seria também.

No entanto, minha ignorância de rede começou a mostrar quando percebi que os endereços IPv6 são um pouco mais complexos. Um problema que notei é que, se eu olhar para o endereço IP na máquina (estava visualizando qual console VMWare mostrava o endereço IP) versus o endereço IP da solicitação da Web (HttpContext.Current.Request.UserHostAddress no .net) Notei que um deles terminou em% 10 e outro em% 11:

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

A única diferença é o% 10 e% 11 - o que dá?

Também vi endereços IPv6 terminarem em "/" seguidos de 2 dígitos. Devo simplesmente ignorar esses 3 dígitos finais (se existirem) ao fazer uma comparação? Em caso afirmativo, quais são os finais alternativos válidos que eu preciso procurar?

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

Aqui está a minha solução com base na resposta fornecida ...

Eu simplesmente armazeno um endereço IP "scrubbed" e o comparo com um endereço IP "scrubbed". Usando o .NET aqui é como eu esfrego um endereço IP. Não é o melhor do ponto de vista do desempenho, mas funciona. Eu prefiro apenas fazer uma comparação doGetAddressBytes() mas estou usando umDictionary e eu decidi contra o passo extra de criar meu próprioByteComparer.

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

questionAnswers(4)

yourAnswerToTheQuestion