【问题标题】:PHP getenv HTTP_X_FORWARDED_FOR contain alphabetPHP getenv HTTP_X_FORWARDED_FOR 包含字母
【发布时间】:2017-06-09 13:17:28
【问题描述】:
$ipaddress = '';
        if ( getenv('HTTP_CLIENT_IP') ) {
            $ipaddress = getenv('HTTP_CLIENT_IP');
        } else if( getenv('HTTP_X_FORWARDED_FOR') ) {
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
            $ipaddress = explode(",", $ipaddress);
            $ipaddress = $ipaddress[0];
        } else if( getenv('HTTP_X_FORWARDED') ) {
            $ipaddress = getenv('HTTP_X_FORWARDED');
        } else if( getenv('HTTP_FORWARDED_FOR') ) {
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        } else if( getenv('HTTP_FORWARDED') ) {
            $ipaddress = getenv('HTTP_FORWARDED');
        } else if( getenv('REMOTE_ADDR') ) {
            $ipaddress = getenv('REMOTE_ADDR');
        } else {
            $ipaddress = 'UNKNOWN';
        }
        return ip2long($ipaddress);


http_client_ip - null
http_x_forwarded_for - 2604:2000:6147:df00:25ee:04a4:ea44:6947, 162.158.62.236
http_x_forwarded - null
http_forwarded_for - null
http_forwarded - null
remote_addr 112.121.183.210

您好,我是 ip 新手,不知道如何获取真实 ip 地址。

  1. 不知道为什么http_x_forwarded_for返回2个ip?

  2. 为什么http_x_forwarded_for第一个包含字母?

  3. 为什么http_client_ip, http_x_forwarded, http_forwarded_for, http_forwarded 为空?

  4. 为什么remote_addrhttp_x_forwarded_for 不同?

哪个是正确的ip地址

【问题讨论】:

    标签: php ip


    【解决方案1】:

    如果您正在处理代理,这些代理可能会在转发请求时添加 X-Forwarded-For 标头。例如:

    client -> proxy -> proxy -> server
    

    这里涉及到两个代理,可能一个在客户端,一个在您的服务器数据中心,或者都在客户端,或者都在您的数据中心,或者您遇到的任何其他组合。

    然后,您的服务器 (PHP) 会将远程 IP 视为最近的代理。这就是它获得“物理”连接的地方。

    为了很好,两个代理都将他们从 HTTP 标头中获取请求的地址添加了。 “字母”地址是IPv6 address

    只有知道谁设置了这些标头,您才应该信任它们。唯一有保证的经过验证的地址是REMOTE_ADDR,因为那是实际的连接。其他只是任何人都可以设置的 HTTP 标头,包括客户端本身。除非您知道您的数据中心有一个代理并且您知道它设置的确切标头,否则您应该忽略它们。

    【讨论】:

    • 我的服务器顺便使用了cdn
    • 那么它就是 CDN 的代理。
    • 所以我应该只使用remote_addr?
    • 那永远是CDN的代理,用处不大。调查您的 CDN 设置的确切标头并验证您是否可以依赖它;那么你也可以使用这些信息。
    • 我尝试 remote_addr & whatismyip.com 不同,whatismyip 显示 HTTP_X_FORWARDED_FOR 一个
    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2012-05-22
    • 2014-04-22
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2023-04-09
    相关资源
    最近更新 更多