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
eclassconnect.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 cant get the Client IP{
ip=Context.Request.ServerVariables["REMOTE_ADDR"].ToString();
//While it cant get the Client IP, it will return proxy IP.}
备注:
1. 有些代理是不会发给我们真实IP地址的
2. 有些客户端会因为“header_access deny”的安全设置而不发给我们IP