使用PHP来获取客户端和服务端IP-php教程

资源魔 30 0
一、php猎取客户端IP

正在PHP猎取客户端IP时,常应用 $_SERVER["REMOTE_ADDR"] 。但若客户端是应用代办署理效劳器来拜访,那取到的是代办署理效劳器的 IP 地点,而没有是真实的客户端 IP 地点。要想透过代办署理效劳器获得客户真个实在 IP 地点,就要应用$_SERVER["HTTP_X_FORWARDED_FOR"]来读取。

但只有客户端应用“通明代办署理”的状况下,$_SERVER["HTTP_X_FORWARDED_FOR"] 的值才是客户端真实的IP(假如是多层代办署理,该值多是由客户端真正IP以及多个代办署理效劳器的IP组成,由逗号“,”分隔);而正在“匿名代办署理”、“诈骗性代办署理”的状况下是代办署理效劳器的IP值(假如是多层代办署理,该值可能由多个代办署理效劳器的IP组成,由逗号“,”分隔);正在“高匿名代办署理”的状况下是空值。

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应用的代办署理(有可能存正在,也能够捏造),有规范界说,用来辨认通过HTTP代办署理后的客户端IP地点,格局:clientip,proxy1,proxy2。具体诠释见 http://zh.wikipedia.org/wiki/X-Forwarded-For。

三个值区分以下:

1、不应用代办署理效劳器的状况:

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

2、应用通明代办署理效劳器的状况: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。

这种代办署理效劳器仍是将您的信息转发给您的拜访工具,无奈达到暗藏实在身份的目的。

3、应用一般匿名代办署理效劳器的状况: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,然而向拜访工具走漏了您是应用代办署理效劳器拜访他们的。

4、应用诈骗性代办署理效劳器的状况: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诈骗它。

5、应用高匿名代办署理效劳器的状况: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。

齐全用代办署理效劳器的信息代替了您的一切信息,就象您就是齐全应用那台代办署理效劳器间接拜访工具。

示例代码:

//猎取用户IP, 界说一个函数getIP()
function getClientIP(){
if (getenv("HTTP_CLIENT_IP")) {
	$ip = getenv("HTTP_CLIENT_IP");
}elseif(getenv("HTTP_X_FORWARDED_FOR")) {
	$ip = getenv("HTTP_X_FORWARDED_FOR");
}elseif(getenv("REMOTE_ADDR")) {
$ip = getenv("REMOTE_ADDR");
	else $ip = "Unknow";
}
return $ip;
}
或许
function getClientIp() {
	$ip = 'unknow';
    foreach (array(
                'HTTP_CLIENT_IP',
                'HTTP_X_FORWARDED_FOR',
                'HTTP_X_FORWARDED',
                'HTTP_X_CLUSTER_CLIENT_IP',
                'HTTP_FORWARDED_FOR',
                'HTTP_FORWARDED',
                'REMOTE_ADDR') as $key) {
        if (array_key_exists($key, $_SERVER)) {
            foreach (explode(',', $_SERVER[$key]) as $ip) {
                $ip = trim($ip);
                //会过滤掉保存地点以及公有地点段的IP,例如 127.0.0.1会被过滤
                //也能够修正成正则验证IP
                if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                    return $ip;
                }
            }
        }
    }
    return $ip;
}

2.php猎取效劳器端IP

效劳器端IP相干的变量
a. $_SERVER["SERVER_NAME"],需求应用函数gethostbyname()取得。这个变量无论正在效劳器端仍是客户端均能正确显示。

b. $_SERVER["SERVER_ADDR"],正在效劳器端测试:127.0.0.1(这个与httpd.conf中BindAddress的设置值相干)。正在客户端测试后果正确。

/**
* 猎取效劳器端IP地点
 * @return string
 */
function getServerIp() { 
    if (isset($_SERVER)) { 
        if($_SERVER['SERVER_ADDR']) {
            $server_ip = $_SERVER['SERVER_ADDR']; 
        } else { 
            $server_ip = $_SERVER['LOCAL_ADDR']; 
        } 
    } else { 
        $server_ip = getenv('SERVER_ADDR');
    } 
    return $server_ip; 
}
或许
function getServerIP(){    
    return gethostbyname($_SERVER["SERVER_NAME"]);    
}

更多相干成绩请拜访PHP中文网相干成绩教程:https://www.php.cn/

以上就是应用PHP来猎取客户端以及效劳端IP的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!