Как вы определяете равенство между двумя адресами IPv6?
У меня есть приложение, которое позволяет администраторам указывать действительные IP-адреса, с которых могут быть сделаны запросы веб-службы. Я просто беру настроенные IP-адреса и сравниваю их с входящим запросом. Сравнение двух IPv4-адресов является тривиальным, и я подумал, что сравнение двух IPv6-адресов также будет полезным.
Однако мое сетевое невежество начало проявляться, когда я заметил, что адреса IPv6 немного сложнее. Одна проблема, которую я заметил, заключается в том, что если я смотрю на IP-адрес на машине (просматривал, какая консоль VMWare показала IP-адрес), в сравнении с IP-адресом из веб-запроса (HttpContext.Current.Request.UserHostAddress
в .NET) Я заметил, что один из них оканчивается на% 10, а другой на% 11:
Разница лишь в% 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()
}