【问题标题】:PHP - Get the public ip [duplicate]PHP - 获取公共IP [重复]
【发布时间】:2011-09-11 06:17:40
【问题描述】:

可能重复:
How do I find a user's IP address with PHP?

我的 PHP 页面中有一个表单。用户填写他的凭据和消息,然后按发送。我通过电子邮件收到他的问题,可以回答他。

但是我也想把人的公网IP加到邮箱里,可以吗?

非常感谢!

【问题讨论】:

  • 你为什么要这样做?

标签: php


【解决方案1】:

您可以使用$_SERVER['REMOTE_ADDR'],但如果您真的想确保获得正确的 IP 而不是代理 IP,那么我发现此功能很有帮助

注意:我不是此代码的所有者,我是在互联网上的某个地方找到的

function get_real_ip()
{

    if (isset($_SERVER["HTTP_CLIENT_IP"]))
    {
        return $_SERVER["HTTP_CLIENT_IP"];
    }
    elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
    {
        return $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
    {
        return $_SERVER["HTTP_X_FORWARDED"];
    }
    elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
    {
        return $_SERVER["HTTP_FORWARDED_FOR"];
    }
    elseif (isset($_SERVER["HTTP_FORWARDED"]))
    {
        return $_SERVER["HTTP_FORWARDED"];
    }
    else
    {
        return $_SERVER["REMOTE_ADDR"];
    }
}

【讨论】:

  • 是的,请让这些 sn-ps 流行起来,这样就很容易欺骗邮件脚本。
  • 所有$_SERVER["HTTP_*"] 变量都被简单地欺骗了。
  • 有效点,但真正的解决方法是什么?我个人存储$_SERVER["REMOTE_ADDR"] 和我能找到的任何其他类型的 var 转发。
【解决方案2】:

您可以使用$_SERVER["REMOTE_ADDR"]。但不一定可靠。

【讨论】:

  • 我不知道除了伪造 IP 数据包以外的任何欺骗 REMOTE_ADDR 的方法。然而,REMOTE_ADDR 可能是代理的地址(甚至是您自己设置的代理)而不是远程用户的地址,这并不重要。例如,我在 apache 前面有 nginx,所以 apache 收到的 REMOTE_ADDR 是我的 nginx 服务器的。
  • @Frank:这大致就是我的暗示!
【解决方案3】:

您可以使用以下代码:

$ip = $REMOTE_ADDR;  

【讨论】:

  • 你不应该依赖注册全局变量来打开。
  • 我认为需要register_globals
【解决方案4】:

尝试使用$_SERVER['REMOTE_ADDR'] 获取用户的IP 地址。

http://php.net/manual/en/reserved.variables.server.php

【讨论】:

  • 在我的本地站点上,我得到 127.0.0.1。我不能在我的本地网站上获取我的公共 IP。
猜你喜欢
  • 2020-07-24
  • 2012-11-03
  • 2018-10-11
  • 1970-01-01
  • 2011-03-16
  • 2020-06-06
  • 2012-05-08
  • 1970-01-01
  • 2014-08-16
相关资源
最近更新 更多