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:
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()
}