您的位置:首页 >文章内容
使用php获取真实请求IP,区分代理IP
来源: 作者:admin 时间:2019-07-27 14:37:00

使用php获取IP的方法能找到很多。


function getIp(){

if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

$ip = getenv("HTTP_CLIENT_IP");

else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

$ip = getenv("REMOTE_ADDR");

else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

$ip = $_SERVER['REMOTE_ADDR'];

else

$ip = "unknown";

return($ip);

}


对这段代码进行解释,这里用到了两个函数,getenv()和strcasecmp(),前一个函数获取得系统的环境变量,如果能取到值,则返回该值,不能则返回false.

$_SERVER是服务器超级全局变量数组,用$_SERVER['REMOTE_ADDR']同样可以获取到客户端的IP地址.二者的区别在于,getenv不支持IIS的isapi方式运行的php.

strcasecmp(string1,string2)字符串函数的用法是把string1和string2进行比较,如果相等返回0,如果string1大于string2,返回大于0的数,小于则返回小于0的数.

函数先使用客户IP,如果不成立尝试用代理的方法,如果不行,再使用REMOTE_ADDR。

 

网友一回答

$_SERVER 打印这个 你什么都看到了

 

网友二回答

获取客户端ip其实不是个简单的事儿,因为存在IP欺骗,江苏服务器和代理问题,所以获取客户端的IP的真实性会打折扣的,不能百分百准确。但是我们还是可以尽量写一些比较完善的获取客户端真正ip方法。使用php获取IP的方法能有很多,我简单给个例子:

 

<?php

function getip() {

$unknown = 'unknown';

if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

}elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) {

$ip = $_SERVER['REMOTE_ADDR'];

}

/**

* 处理多层代理的情况

* 或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;

*/

if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip));

return $ip;

}

?>

 

1、没有使用代理的情况

REMOTE_ADDR = 客户端IP

HTTP_X_FORWARDED_FOR = 没数值或不显示

 

2、使用透明代理的情况

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:221.5.252.160, 203.98.182.163, 203.129.72.215)

这类代理服务器还是将客户端真实的IP发送给了访问对象,无法达到隐藏真实身份的目的.

 

3、使用普通的匿名代理

REMOTE_ADDR = 最后一个代理服务器 IP

HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似: 203.98.182.163, 203.98.182.163, 203.129.72.215)

江苏高防服务器这种情况下隐藏了客户端的真实IP,但是向访问对象透露了客户端是使用代理服务器访问它们的.

 

4、使用欺骗性代理服务器

REMOTE_ADDR = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:220.4.251.159, 203.98.182.163, 203.129.72.215)

这种情况下同样透露了客户端是使用了代理服务器,但编造了一个虚假的随机IP(220.4.251.159)代替客户端的真实IP来欺骗它.

 

5、使用高级匿名代理服务器

REMOTE_ADDR = 代理服务器 IP

HTTP_X_FORWARDED_FOR = 没数值或不显示,也可能是unknown


按字母排序文章
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
相关文章内容简介更多>>
最新标签
推荐阅读
  • 24 2018-11
    优质代理IP网站哪里有?

    现如今网络已经深入到人们生活的各个方面,我们在使用网络的时候可能会使用到代理IP。比如,我们做网络业务数量采集的时候,我们的电脑可能无法更换IP,这个就需要代理IP,它可以使我们

  • 26 2018-11
    正向代理和反向代理服务器有什么区别?

    首先给大家解释一下什么是正向代理,它是从客户/客户端角度出发,即为了从原始服务器中取得内容,由客户端想代理服务器发出请求,并指定目标访问服务器,而后,代理(服务器)向目标

  • 31 2019-03
    使用了代理IP为什么还会被封

    IP为什么会被封?当某个IP的操作达到了目标服务器限制的阈值时,IP就会被封,比如目标服务器限制,一个IP只能注册3个账号,只能发10篇帖子等等,超过了这个阈值就会封IP

  • 04 2018-12
    正向代理与反向代理通俗理解

    今天小编给大家介绍一下正向代理与反向代理,用一种通俗易懂的方式介绍,请看下面

在线客服

QQ资讯

上班时间