我有一个应用程序,允许管理员指定有效的 IP 地址,可以从中发出 Web 服务请求。我只需获取配置的 IP 地址并将它们与传入的请求进行比较。比较两个 IPv4 地址是微不足道的,我认为比较两个 IPv6 地址也是如此。
然而,当我注意到 IPv6 地址有点复杂时,我的网络无知开始显现。我注意到的一个问题是,如果我查看机器上的 IP 地址(正在查看 VMWare 控制台显示的 IP 地址)与来自 Web 请求的 IP 地址(HttpContext.Current.Request.UserHostAddress
在 .NET 中),我注意到其中一个以%10 和 %11 中的另一个:
- ipconfig 显示:fe80:8179:5576:c6d0:8b16%11
- UserHostAddress 显示:fe80::8179:5576:c6d0:8b16%10
唯一的区别是 %10 和 %11 - 什么给出?
我还看到 IPv6 地址以“/”结尾,后跟 2 位数字。在进行比较时,我是否应该忽略这最后 3 位数字(如果它们存在)?如果是这样,我需要寻找哪些有效的替代结局?
- - - - - - 编辑 - - - - - - -
这是我根据提供的答案的解决方案...
我只是存储一个“清理过的”IP 地址并将其与“清理过的”IP 地址进行比较。在此处使用 .NET 是我清理 IP 地址的方式。从性能的角度来看不是最好的,但它确实有效。我宁愿只做一个比较,GetAddressBytes()
但我正在使用 aDictionary
并且我决定反对创建自己的ByteComparer
.
IPAddress incomingIp = null;
bool ipAddressParsePassed = IPAddress.TryParse(userHostAddress, out incomingIp);
if (ipAddressParsePassed)
{
IPAddress scrubbedIp = new IPAddress(incomingIp.GetAddressBytes());
string scrubbedIpStr = scrubbedIp.ToString()
}