用户实际Ip获取

33 篇文章 0 订阅

在项目中,经常会有记录浏览日志的时候,同时需要记录客户端真实ip,主要判断客户端是否使用代理的情况
1、php中判断和获取

相关函数介绍:
1$_SERVERgetenv的区别:getenv不支持IIS的isapi方式运行的php
2、HTTP_CLIENT_IP:可通过http头伪造, 是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。
3、HTTP_X_FORWARDED_FOR:可通过http头伪造
4、REMOTE_ADDR:可能是用户真实IP也可能是代理IP,是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。
5$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
6$_SERVER['HTTP_CLIENT_IP'];  //代理端的(有可能存在,可伪造)
7$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

示例:

//记录浏览某个页面的日志
function addLog(){
    $ads = Input::get('ads');
    $ads = htmlspecialchars(($ads));
    $aVisitlog = array(
        'ads' => $ads,
        'page_id' => Input::get('page_id'),
        'ip' => this->ip(),
        'created_at' => date('Y-m-d H:i:s' , time())
    );
    $oVisit = new VisitLog($aVisitlog);
    $oVisit->save();
}

//用户所在IP--客户端
function ip(){
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')){
        $ip = getenv('HTTP_CLIENT_IP');
    }elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')){
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    }elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')){
        $ip = getenv('REMOTE_ADDR');
    }elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')){
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : 'unknown';
}

2、js中判断和获取

<script>
function browserRedirect(url) {  
    var sUserAgent = navigator.userAgent.toLowerCase();  
    var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
    var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";  
    var bIsMidp = sUserAgent.match(/midp/i) == "midp";  
    var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";  
    var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";  
    var bIsAndroid = sUserAgent.match(/android/i) == "android";  
    var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";  
    var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";  
    if ((bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) ){
        window.location.href=url;
    }
} 
$(document).ready(function(){
    var thisId = window.location.hash;
    if(thisId != "" && thisId != undefined){
      var url  = '/mobile/want';
      browserRedirect(url);  
    }else{
      var url  = '/mobile';
      browserRedirect(url);  
    }
});
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值