网站使用CDN后,获取真实IP的办法
文章来源:来之星星 发布者:Jonny 发布时间:2014/10/19 21:59:32【打印此页 】 【关闭 】
Supesite使用CDN后获取真实IP 办法 include/main.inc.php文件,这部分 if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $_SGLOBAL['onlineip'] = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $_SGLOBAL['onlineip'] = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $_SGLOBAL['onlineip'] = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $_SGLOBAL['onlineip'] = $_SERVER['REMOTE_ADDR']; } 替换成 function get_real_ip() { $ip=false; if(!empty($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']); if ($ip) { array_unshift($ips, $ip); $ip = FALSE; } for ($i = 0; $i < count($ips); $i++) { if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])) { $ip = $ips[$i]; break; } } } return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); } $_SGLOBAL['onlineip'] = get_real_ip(); Discuz!使用CDN后获取真实IP办法 nclude/common.inc.php 找到如下代码: if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } 替换为: function get_real_ip() { $ip=false; if(!empty($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']); if ($ip) { array_unshift($ips, $ip); $ip = FALSE; } for ($i = 0; $i < count($ips); $i++) { if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])) { $ip = $ips[$i]; break; } } } return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); } $onlineip = get_real_ip(); 帝国cms后台记录的ip日志和用户注册记录的ip \e\class\connect.php搜索function egetip()函数中的获取ip代码修改成以上部分 DZ注册用户IP和邀请码拥有者IP相同的解决办法 方法A: register.php 200行 showmessage('register_invite_iperror'); 改为 //showmessage('register_invite_iperror'); 方法B: 在include/common.inc.php文件中把 代码:if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } 替换成: 代码: $onlineip=getenv('HTTP_X_FORWARD_FOR'); -------------------- 做了CDN的ASP网站如何取到用户真实IP程序 function checkip(checkstring)'用正则判断IP是否合法 dim re1 set re1=new RegExp re1.pattern="^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$" re1.global=false re1.Ignorecase=false checkip=re1.test(checkstring) set re1=nothing end function function get_cli_ip()'取真实IP函数,先 HTTP_CLIENT_IP 再 HTTP_X_FORWARDED_FOR 再 REMOTE_ADDR dim client_ip if checkip(Request.ServerVariables("HTTP_CLIENT_IP"))=true then get_cli_ip = checkip(Request.ServerVariables("HTTP_CLIENT_IP")) else MyArray = split(Request.ServerVariables("HTTP_X_FORWARDED_FOR"),",") if ubound(MyArray)>=0 then client_ip = trim(MyArray(0)) if checkip(client_ip)=true then get_cli_ip = client_ip exit function end if end if get_cli_ip = Request.ServerVariables("REMOTE_ADDR") end if end function 服务端: //方法一 HttpContext.Current.Request.UserHostAddress; //方法二 HttpContext.Current.Request.ServerVariables[ "REMOTE_ADDR" ]; //方法三 string strHostName = System.Net.Dns.GetHostName(); string clientIPAddress = System.Net.Dns.GetHostAddresses(strHostName). GetValue( 0 ).ToString(); //方法四(无视代理) HttpContext.Current.Request.ServerVariables[ "HTTP_X_FORWARDED_FOR" ]; 客户端: //方法五 var ip =''; alert("Your IP address is "+ip); //方法六(无视代理) function GetLocalIPAddress() { var obj = null ; var rslt =""; try { obj = new ActiveXObject("rcbdyctl.Setting"); rslt = obj.GetIPAddress; obj = null ; } catch (e) { // } return rslt; } 来自印度的MCT Maulik Patel提供了一种服务端的解决方案,很好: if (Context.Request.ServerVariables[ "HTTP_VIA" ]!= null ) // using proxy { ip=Context.Request.ServerVariables [ "HTTP_X_FORWARDED_FOR" ]. ToString(); // Return real client IP. } else // not using proxy or can't get the Client IP { ip=Context.Request.ServerVariables[ "REMOTE_ADDR" ].ToString(); //While it can't get the Client IP, it will return proxy IP. } 备注: 1. 有些代理是不会发给我们真实IP地址的 2. 有些客户端会因为“header_access deny”的安全设置而不发给我们IP
CopyRight © 2009-2018 Qianxinet.com 版权所有
增值电信业务经营许可证:陕B1.B2-20100043 陕西省互联网协会理事单位
地址:陕西省西安市高新区锦业一路58号嘉昱大厦C座三层
客服热线:029-68553302 技术值班电话:13072970061