资讯专栏INFORMATION COLUMN

PHP获取客户端的IP

tianlai / 1305人阅读

摘要:要想透过代理服务器取得客户端的真实地址,就要使用来读取。还有一点需要注意的是如果客户端没有通过代理服务器来访问,那么用取到的值将是空的。获取客户端相关文章获取用户地址通用方法常见安全隐患

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址
2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关
3.HTTP_CLIENT_IP:客户端的ip

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

/**
 * 获取客户端IP
 * @return string
 */
function get_client_ip()
{
    $realip = "";
    if ($_SERVER["HTTP_X_FORWARDED_FOR"] && preg_match("/^([0-9]{1,3}.){3}[0-9]{1,3}$/", $_SERVER["HTTP_X_FORWARDED_FOR"]))
    {
        $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    else if ($_SERVER["HTTP_CLIENT_IP"]  && preg_match("/^([0-9]{1,3}.){3}[0-9]{1,3}$/", $_SERVER["HTTP_CLIENT_IP"]))
    {
        $realip = $_SERVER["HTTP_CLIENT_IP"];
    }
    else if($_SERVER["REMOTE_ADDR"] && preg_match("/^([0-9]{1,3}.){3}[0-9]{1,3}$/", $_SERVER["HTTP_CLIENT_IP"]))
    {
        $realip = $_SERVER["REMOTE_ADDR"];
    }

    return $realip;
}

相关文章:
获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21954.html

相关文章

  • PHP面试之网络协议面试题

    摘要:之前的文章可以关注我的面试专栏获取,或者关注我的公众号琉忆编程库查看历史获取。面试时如何给自己添金没接触过支付功能为此特意准备了一篇新手零基础对接境外支付的文章,为你面试添金,关注公众号琉忆编程库,回复,我发给你。 你好,是我琉忆。本篇是本周(2019.2-25至3-1)的最后一篇文章。之前的文章可以关注我的PHP面试专栏获取,或者关注我的公众号琉忆编程库查看历史获取。 我正在segm...

    Dogee 评论0 收藏0
  • ajax概述

    摘要:换一台电脑就要重新安装。并且还需要适配不同的系统。提交大小几乎没有限制。即协议主要由请求和响应组成。相反则为同步按照程序的顺序,依次往下执行,必须等上一程序执行完成之后才能执行下一程序,阻碍程序的执行。 Ajax 服务器 类型 按照服务类型:文件服务器,数据库服务器,邮件服务器,Web服务器 按照操作系统:Linux服务器,Windows服务器 按照应用软件:Apache服务器,Ng...

    Achilles 评论0 收藏0
  • 干货:Java正确获取客户端真实IP方法整理

    摘要:但是在通过了,等反向代理软件就不能获取到客户端的真实地址了。下面是一个参考获取客户端地址的方法如果使用的是连接池,可以参考使用方法,但这个是经过多级代理的地址,需要自己处理下获取第一个。 showImg(https://segmentfault.com/img/remote/1460000015379119); 在JSP里,获取客户端的IP地址的方法是:request.getRemot...

    felix0913 评论0 收藏0
  • IP伪造与防范

    摘要:对协议进行扩展。通过此项措施,强行将设置为客户端使客户端无法通过本文所述方式伪造。 在阅读本文前,大家要有一个概念,由于TCP需要三次握手连接,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以伪造数据包来源 IP ,但这会让发送出去的数据包有去无回,无法实现正常的通信。 一些DDoS 攻击,它们只需要不断发送数据包,而不需要正...

    tianlai 评论0 收藏0
  • IP伪造与防范

    摘要:对协议进行扩展。通过此项措施,强行将设置为客户端使客户端无法通过本文所述方式伪造。 在阅读本文前,大家要有一个概念,由于TCP需要三次握手连接,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以伪造数据包来源 IP ,但这会让发送出去的数据包有去无回,无法实现正常的通信。 一些DDoS 攻击,它们只需要不断发送数据包,而不需要正...

    solocoder 评论0 收藏0

发表评论

0条评论

tianlai

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<