Как вы определяете равенство между двумя адресами IPv6?

У меня есть приложение, которое позволяет администраторам указывать действительные IP-адреса, с которых могут быть сделаны запросы веб-службы. Я просто беру настроенные IP-адреса и сравниваю их с входящим запросом. Сравнение двух IPv4-адресов является тривиальным, и я подумал, что сравнение двух IPv6-адресов также будет полезным.

Однако мое сетевое невежество начало проявляться, когда я заметил, что адреса IPv6 немного сложнее. Одна проблема, которую я заметил, заключается в том, что если я смотрю на IP-адрес на машине (просматривал, какая консоль VMWare показала IP-адрес), в сравнении с IP-адресом из веб-запроса (HttpContext.Current.Request.UserHostAddress в .NET) Я заметил, что один из них оканчивается на% 10, а другой на% 11:

ipconfig показывает: fe80: 8179: 5576: c6d0: 8b16% 11UserHostAddress показывает: fe80 :: 8179: 5576: c6d0: 8b16% 10

Разница лишь в% 10 и% 11 - что дает?

Я также видел адреса IPv6, оканчивающиеся на "/", за которыми следуют 2 цифры. Должен ли я просто игнорировать эти последние 3 цифры (если они существуют) при сравнении? Если да, то какие действительные альтернативные окончания мне нужно искать?

----------- РЕДАКТИРОВАТЬ -------------

Вот мое решение на основе предоставленного ответа ...

Я просто храню «очищенный» IP-адрес и сравниваю его с «очищенным» IP-адресом. Использование .NET здесь, как я вычищать IP-адрес. Не лучший с точки зрения производительности, но он работает. Я бы предпочел просто сделать сравнениеGetAddressBytes() но я используюDictionary и я отказался от дополнительного шага создания своегоByteComparer.

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

Ответы на вопрос(4)

Ваш ответ на вопрос