【问题标题】:Get the public IP address of a client获取客户端的公网 IP 地址
【发布时间】:2014-12-08 19:24:21
【问题描述】:

我正在创建一个 Web 应用程序,我需要一个功能,如果有人客户端登录到我的网站,则必须记录客户端的公共 IP 地址。我有一些 javascript 可以做到这一点,但我的一些朋友不同意使用 javascript 库,因为他们不信任它。如http://l2.io/ip.js?var=myipas mentioned here

所以我们需要所有这些作为服务器端代码。所以我在这个中发现了更多的代码 link 但不幸的是我没有得到预期的结果(它只返回本地主机 IP)。谁能帮我解决这个问题。

我试过下面的代码

string VisitorsIPAddr = string.Empty;
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
{
    VisitorsIPAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
{
    VisitorsIPAddr = HttpContext.Current.Request.UserHostAddress;
}

但这并没有为我提供公共 IP。我需要部署它吗?

【问题讨论】:

  • 什么代码返回本地主机IP?
  • @RadioSpace like HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 始终为空
  • “我没有得到预期的结果(它只返回本地主机 IP)” - 你需要解释它发生在什么情况下。否则,它是您链接到的问题的直接副本。
  • @Riki - 请注意,您关于缺少“x-forwarded-for”标头的评论并不能完全澄清您的问题。请求没有通过代理(或代理不关心设置标头)这一事实并不意味着太多......
  • @AlexeiLevenkov 我添加了一些我尝试过的代码,但代码只给了我 127.0.0.1。我还将网站托管到 IIS。

标签: c# ip asp.net-mvc-5


【解决方案1】:
HttpContext.Current.Request.UserHostAddress

这应该获取客户端的公共 IP 地址

编辑

所以你在寻找你自己机器的 IP 地址,就像世界其他地方看到的那样?? 只有当您托管在一个 Intranet 上时,这才真正重要,其中客户端将位于同一网络上,如果您使用 HttpContext.Current.Request.UserHostAddress,这就是您将获得的唯一地址。在这种情况下,您将需要使用查找 api 或其他东西。但是你会知道你的网络的外部 IP!

如果这是托管在互联网上,那么 HttpContext.Current.Request.UserHostAddress 将可以正常工作,因为每个客户端都会显示它的外部 IP。

我猜它显示的是 127.0.0.1,因为您正在本地机器上进行测试,这将是它的环回地址。

希望对你有帮助

【讨论】:

  • 我按照更新的代码中提到的那样做了,但它仍然给我 127.0.0.1 我错过了什么
  • 你看到更新了吗?如果我的回答不适合您的情况,请说出或接受答案
  • 这对我不起作用。我已将此解决方案部署到服务器上,并且我正在获取本地 IP 地址,例如 192.168.1.12 和 10.0.0.22
  • 它们不是本地地址,它们是为专用网络保留的专用网络地址。再试一次,从你尝试的电脑上运行 ipconfig,它们应该匹配
最近更新 更多