PHP获取客户端IP


/**
 * 获得用户的真实IP地址
 *
 * @access  public
 * @return  string
 */
function real_ip()
{
    static $realip = NULL;
 
    if ($realip !== NULL)
    {
        return $realip;
    }
 
    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
 
            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
            foreach ($arr AS $ip)
            {
                $ip = trim($ip);
 
                if ($ip != 'unknown')
                {
                    $realip = $ip;
 
                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }
 
    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
 
    return $realip;
}

$_SERVER和getenv的区别,getenv不支持IIS的isapi方式运行的php

一、没有使用代理服务器的情况:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器的情况:Anonymous Proxies

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器的情况:Distorting Proxies

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。


几个参数的区别:

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
HTTP_CLIENT_IP 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP'];  //代理端的(有可能存在,可伪造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

### 回答1: jQuery 是一个 JavaScript 库,它通过封装了常用的 JavaScript 功能,让开发者可以更加方便地进行 JavaScript 开发。 然而,JavaScript 本身并没有直接获取客户端 IP 的方法,因为这需要在服务端进行处理。如果你想要获取客户端 IP,需要借助服务端语言来实现。 如果你使用的是 PHP,可以使用 `$_SERVER['REMOTE_ADDR']` 来获取客户端 IP。如果你使用的是其他语言,也可以查找对应的获取客户端 IP 的方法。 在前端页面中,你可以使用 Ajax 技术将客户端 IP 发送到服务端,然后进行相应的处理。但是需要注意的是,客户端 IP 是可以被伪造的,所以在处理客户端 IP 时需要进行相应的安全性检查和防范措施。 ### 回答2: 在jQuery中,无法直接通过客户端IP地址来获取,因为jQuery是一个客户端的JavaScript库,它主要用于处理HTML DOM、事件处理和动画效果等功能,而IP地址是由服务器分配的信息,它是在客户端与服务器之间的通信中传递的。但是,可以通过使用AJAX来向服务器发送请求,从服务器获取客户端IP地址。 以下是使用jQuery的代码示例,通过AJAX向服务器发送请求获取客户端IP地址: ```javascript $.ajax({ url: "https://api.ipify.org/?format=json", dataType: "json", success: function(data) { var clientIP = data.ip; console.log("客户端IP地址为:" + clientIP); // 可以在此处进行处理,如显示在页面上 } }); ``` 在这个例子中,我们使用了ipify API来获取IP地址。通过向`https://api.ipify.org/?format=json`发送GET请求,它将返回一个JSON对象,其中包含了客户端IP地址。在`success`回调函数中,我们通过`data.ip`获取到具体的IP地址,然后可以对其进行进一步处理,如显示在页面上或进行其他操作。 需要注意的是,在使用该方法时,需要确保客户端能够访问到ipify API,因为这涉及到从服务器获取数据。此外,也可以使用其他的IP API来获取客户端IP地址,具体的实现方式可能会有所不同,但核心思想是相似的。 ### 回答3: 要使用jQuery获取客户端IP地址,需要借助第三方服务来实现。由于客户端IP地址是客户端与服务器之间的通信过程中自动分配的,服务器无法直接通过JavaScript获取客户端IP地址。 一种方法是使用免费的IP定位服务,如"ip-api.com",它提供了一个公共的API接口可以查询客户端IP地址。代码如下: ```JavaScript $(document).ready(function(){ var url = 'http://ip-api.com/json/?fields=query'; $.getJSON(url, function(data){ var ipAddress = data.query; console.log(ipAddress); }); }); ``` 这段代码使用了jQuery的`getJSON`方法来向ip-api.com发送请求,并获取返回的JSON数据。然后从数据中提取出IP地址,并打印在控制台上。 注意,这种方式只适用于在浏览器中执行JavaScript的情况。如需在服务器端获取客户端IP地址,需要使用其他方法,例如在服务器端进行日志记录。 当然,也可以使用其他的IP定位服务来获取客户端IP地址,并根据需要进行相应的处理。以上是其中一种实现方式,具体使用哪种方式需要根据实际需求和可用资源来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值