【问题标题】:php getting real IP addressphp获取真实IP地址
【发布时间】:2013-02-07 13:35:38
【问题描述】:

嗯, $_SERVER['REMOTE_ADDR']WhatIsMyIP 显示两个不同的 IP 地址。我想捕捉 IP 地址,就像它在“whatismyip”上的显示方式一样。

【问题讨论】:

  • 具体是什么情况?您是否在自己的本地主机上进行测试?
  • 我们可以看看你用过的一些代码吗? $_SERVER["REMOTE_ADDR"] 应该给出相同的结果,除非您联系内部网络上的服务器?
  • 查看answer here
  • 你在路由器后面吗?如果您是 NATed,则无法从 NAT 内部确定您的真实 IP 地址,我不相信。至少我不会想象 PHP 有什么方法可以做到这一点。我相信唯一的方法是从外部的东西中找出来,比如 whatismyip.com。您也许可以点击该页面并解析 HTML 以获取它。
  • 如果您看到的是 192.168.x.x(假设是正常的家庭地址方案),那么您看到的是您的本地地址,而 whatismyip 显示的是您的全球(来自 ISP)地址

标签: php ip


【解决方案1】:

一些网络 101:

    +--+
    |  |
    +--+
whatismyip.com                 +--+
108.162.207.135         +----- |  |
                        |      +--+
     |       +--+       |  your computer
     +------ |  | ------+  10.127.254.21
             +--+       |
          NAT router    |      +--+
          85.89.XX.XX   +----- |  |
                               +--+
                          your web server
                           10.127.254.22

如果这是您的网络设置,your web server 将在两者通信时将10.127.254.21 视为your computer 的 IP。这是因为要将数据从your computer 路由到your web server,数据包只需要直接在两者之间的线路上传输。如果两者是同一台机器,它甚至不需要这样做。

如果您尝试从your computer 访问whatismyip.com,则whatismyip.com 会将85.89.XX.XX 视为原始IP 地址,因为数据会在从your computerwhatismyip.com 的过程中遍历您的NAT router。 NAT 路由器使用 NAT 技术代理请求,在此过程中隐藏您的实际 IP 地址。对于whatismyip.com,看起来请求来自路由器,而不是您的your computer

想要在your web server 上得到85.89.XX.XX 作为$_SERVER['REMOTE_ADDR'] 的答案是相当随意的。这不是“你的真实IP”,它是路由器的IP,与your computeryour web server 之间的通信没有任何关系。

【讨论】:

  • 不...我使用外部服务器。我必须知道登录用户的原始 IP 地址
  • -_-;;这究竟是什么意思,“外部服务器”?您的网络拓扑是什么样的?底线是:你会得到$_SERVER['REMOTE_ADDR'] 中的内容。那就是发出请求的 IP。这可能是也可能不是机器的“实际”地址(例如,路由器/代理地址与本地地址),但它是您将获得的唯一地址。如果您有一些不符合此答案的具体情况,请更详细地描述您的情况。
  • 嘿...这是典型的情况。我在远程服务器上工作,出于安全原因,我必须收集登录用户的信息:登录时间、登录名和 IP 地址,所以内部 IP 地址对我来说没用。
【解决方案2】:

该网站显示您的全球 IP 地址(您用来连接互联网的地址)。 REMOTE_ADDR 显示客户端地址,我猜这是您自己的机器,根本不通过互联网。这就是为什么它会显示一个本地 IP 地址,而不是一个全局地址。

底线:您使用您的全局地址请求远程服务器 (whatismyip.com),但使用您的本地地址请求您的本地服务器(如果它在同一台机器上,则为 127.0.0.1)。

【讨论】:

    【解决方案3】:

    当您运行本地 Web 服务器并使用 $_SERVER['REMOTE_ADDR'] 时,它将返回您在本地网络上的地址(如果在另一台计算机上)或 127.0.0.1(A.K.A. localhost)如果在您自己的计算机上。而“我的 IP 是什么”将查看您的网络到 Internet 的 IP 地址。我希望这有助于澄清正在发生的事情。

    无论如何,$_SERVER['REMOTE_ADDR'] 在适当的网络服务器上“实时”运行时应该可以正常工作,所以如果您打算这样做,您不必担心。

    【讨论】:

    • 好的我明白了,但是有没有机会通过 php 捕获全球 IP 地址?
    • @MacUmatik 如果您转发端口,然后尝试通过网络的“外部”IP 地址连接(或获取其他连接)到您的 Web 服务器;那么是的。
    • hmm ...也许应该问一个不同的问题...我需要创建一个包含登录时间、用户名和 IP 地址的数组,并将其放入数据库,因此使用 $_SERVER[' REMOTE_ADDR'] 没用,因为它显示了内部 IP 地址。那么如何获取真实用户 IP 的信息呢?
    • @MacUmatik 如果其他人要连接到您的网络服务器,它不会为他们显示为 127.0.0.1。当您的计算机正在运行 Web 服务器时,它只会为您显示为 127.0.0.1。如果您将代码放在生产网络服务器上,那么当它准备好时就不会出现问题。
    • @MacUmatik 希望对您有所帮助。 :)
    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2011-02-07
    • 2013-08-18
    • 1970-01-01
    • 2011-04-22
    • 2013-10-02
    相关资源
    最近更新 更多