【问题标题】:Getting IP address from client, not front-end server从客户端获取 IP 地址,而不是前端服务器
【发布时间】:2018-06-08 13:28:11
【问题描述】:

我有一个 WEB API,它有一个 C# 后端(使用 DDD)和一个在不同服务器中托管的 Angular 中使用它的前端。我想在他们登录时获取我的客户的 IP(出于审计目的),当我尝试通过邮递员运行我的代码时它可以工作,但是当通过前端发出请求时,它总是返回前端服务器 IP。

我尝试过使用IpPublicKnowledge,这是一个使用网页获取 IP 的 Nuget 包。

我尝试了从 HttpContext 获取 IP 的不同方法,但它们也返回前端服务器 IP,而不是客户端的 IO。

【问题讨论】:

  • 了解当您的请求通过代理层时,HTTP_X_FORWARDED_FOR 标头是如何组成的。然后,编写一个分解列表的代码,而不是最后一个(您的前端服务器),而是第一个(实际客户端 IP)。
  • 换句话说,这看起来像是 stackoverflow.com/questions/753645/… 的副本。是吗?
  • 您的 Web API 获取调用 Web API 的应用程序的 IP。因此,如果您的 Web 应用程序调用 Web API,那么它将获得 Web 应用程序的 IP。如果您想要最终用户的 IP,那么您应该在 Web 应用程序中获取该 IP,然后将其转发到 Web API。
  • @WiktorZychla 我查看了其他问题,它指出我可以使用 HTTP_X_FORWARDED_FOR 获取客户端的 IP,但这不一定是客户端的 IP,它可能是公司网关和一些代理擦除它数据出来。所以它不像我想要的那样准确
  • @ChetanRanpariya 我明白了,但是这个 API 将被其他应用程序(移动)使用,我想只负责在后端获取 IP。

标签: c# asp.net-web-api backend


【解决方案1】:

如果有人想知道,我正在回答这个问题,我试图通过HTTP_X_FORWARDED_FOR 获取 IP,但它不够可靠。所以解决的方法是创建一个从客户端获取 ip 并让前端应用程序使用它并将其发送到后端的 php 服务器。 @Chetan Ranpariya 也这么说,这最终成为我最后的手段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多