首页 > 解决方案 > C# 确实需要外部 ip 来获得最大的心灵服务

问题描述

我们在我们的 Web 应用程序中使用 maxmind 地理 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");
}

我们在公司网络下,所以在本地环境以及开发环境中,我们习惯于获取像这样的私有IP地址 10.XXX

使用此地址,我们总是无法找到客户端位置。

所以真正的问题是,当您将外部/公共 ip(190.XXX) 传递给 maxmind 时,它只能工作。

我们真的需要获取外部/公共 ip 来为 maxmind 服务提供输入吗?

标签: c#geolocationmaxmind

解决方案


您正确使用了 10.xx.xx.xx 范围,该范围保留供私人(内部)使用。

您需要做的就是更改您的代码,以便在 Maxmind 查找之前将要查找的“10”IP 替换为同一区域设置的“公共”IP。如果您的公司有多个位置,那么您可以创建一个内部 IP 数组/表来公开“区域设置识别”IP。

例如,如果美国洛杉矶的部门使用 10.222.xx.xx;和 NY,USA 使用 10.123.xx.xx 地址,然后对于这些 IP,只需使用“等效”公共 IP 进行 Maxmind 查找。因此,对于 10.123.xx.xx(美国纽约州),请改为查找 154.16.85.37。

您甚至可能根本不需要为您的“10 个 IP”使用 Maxmind。例如,如果您只需要国家代码;然后将其包含在您自己的“IP 10”查找表/数组中,对于前缀为 10 的 IP,而不是您自己的表中的 Maxmind 查找查找。


推荐阅读