【问题标题】:Reliably getting a web client IP可靠地获取 Web 客户端 IP
【发布时间】:2009-07-22 04:32:49
【问题描述】:

获取连接到您网站的远程客户端 IP 地址的最可靠方法是什么?我研究过的一些选项是:

  • 服务器变量(例如 Apache 中的 REMOTE_ADDR),虽然这通常是代理地址。
  • 一个 Java 小程序,但 IE(至少我正在使用的那个)似乎否认它。

我唯一想到的另一件事是让客户端通过 HTTPS 连接,在这种情况下应该绕过代理(一般来说),因此 REMOTE_ADDR 是准确的。

有什么想法吗?

【问题讨论】:

    标签: networking ip-address


    【解决方案1】:

    任何客户端(javascript、java)都会为您提供 PC 的 IP 地址。这可能是一个内部 IP 地址,例如 10.0.0.1。

    Re:SSL + REMOTE_ADDR,大多数工作场所代理通过应用程序级代理发送所有 SSL,有些只允许 443 出站。任何通过代理的东西仍然会给你代理地址,因为代理仍然是连接到你的网络服务器的计算机。

    【讨论】:

    • 您以Javascript为例,但您无法使用Javascript获取本地IP。否则有可能使用 Javascript 和 AJAX 将 IP 获取回服务器。
    • 我记得一些关于 Tor 通过 Javascript 泄露 IP 地址的事情。很可能我记错了。
    • 不,只有在页面刷新或等到 Tor 被禁用后才会这样。 Javascript 无法获取本地 IP。
    【解决方案2】:

    如果代理不透明(例如,在公司网络上有客户端),仍然可以通过代理进行 HTTPS。使用通过代理的 HTTPS,REMOTE_ADDR 仍将是代理地址 - 代理仍在路径中,它只能看到加密的流量。

    如果客户端通过代理,您将不得不依靠代理告诉您他们的 IP。 X-Forwarded-For 标头将包含此内容,但只有在您信任代理时才能真正依赖此内容。如果这是出于记录目的,请同时记录 REMOTE_ADDR 和 X-Forwarded-For。如果是为了其他目的,您需要维护一个代理白名单(由 REMOTE_ADDR 确定),您将从那里接受 X-Forwarded-For。

    【讨论】: