我们在我们的web应用程序中使用maxmind geo ip位置服务。利用这个maxmind,我们需要ipaddress作为输入。
我们遵循下面的代码片段来获取Ip地址。
var ip = Request.UserHostAddress;
if (Request.Headers["X-Forwarded-For"] != null)
{
ip = Request.Headers["X-Forwarded-For"];
Console.WriteLine(ip + "|X-Forwarded-For");
}
else if (Request.Headers["REMOTE_ADDR"] != null)
{
ip = Request.Headers["REMOTE_ADDR"];
Console.WriteLine(ip + "|REMOTE_ADDR");
}我们是在公司网络下,所以在本地环境和开发环境中,我们通常会获得像10.x这样的私有ip地址。
使用此地址时,我们总是无法定位客户端位置。
我们真的需要获取外部/公共ips来为maxmind服务提供输入吗?
发布于 2018-08-24 00:50:59
您正在将Maxmind用于IP服务,该服务与您的客户端的 IP有关,而不是您的。
Private IPs被内部网络广泛使用(像您的家庭和公司/企业),所以它们是而不是唯一的(除了在公共互联网上不可路由等)。
发布于 2018-08-24 13:51:33
所有地理位置提供程序仅在公共IP地址上工作。LAN中正在使用私有IP地址,只要它不在同一个LAN中,就可以重新分配。确定地理位置信息不存在唯一性。
发布于 2018-08-24 19:34:20
您正确地使用了10.xx.xx.xx范围,该范围是为私人(内部)使用而保留的。
你所需要做的就是修改你的代码,这样在你的Maxmind查找之前,你就可以用一个相同地区的"public“IP替换要查找的"10”IP。如果您的公司有多个位置,那么您可以创建一个内部If数组/表,以公开“区域设置标识”If。
例如,如果美国洛杉矶的部门使用10.222.xx.xx;而美国纽约使用10.123.xx.xx地址,那么对于这些IP,只需使用“等效”公共IP的Maxmind查找即可。因此,对于10.123.xx.xx (纽约,美国),请查看154.16.85.37。
你甚至可能根本不需要为你的"10个IP“使用Maxmind。例如,如果您只需要国家代码;则将其包括在您自己的"IP 10“查找表/数组中,并且对于前缀为10的IP,而不是从您自己的表中查找Maxmind。
https://stackoverflow.com/questions/51990574
复制相似问题