您的位置:首页 >文章内容
使用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
相关文章内容简介更多>>
最新标签
推荐阅读
  • 08 2018-11
    IPAD如何设置代理IP

    近些年来,社会科技在飞速发展,各种社交工具层出不穷,手机、电脑、IPAD等等,今天小编给大家介绍一下IPAD如何设置代理ip,请看下面的介绍

  • 22 2018-08
    ip代理是什么

    代理服务器英文全称是(Proxy Server),也叫做代理IP,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。代理服务器就好象一个大的Cache,这样就能显著提高浏览速

  • 30 2020-03
    网络营销用代理IP有什么好处

    代理IP是目前换IP比较方便的软件,解决IP限制,例如爬虫、刷屏等,还可以隐藏真实IP。很多新作网络营销的人员对其不太了解,那么,网络营销用代理IP有什么好处?

  • 13 2019-08
    网络爬虫不用代理IP会被封吗

    网络爬虫大家都知道是抓取数据的程序,很多人都说爬虫需要用代理IP才能不被封IP。那么,网络爬虫不用代理IP会被封吗?今天小编就来为大家解开这个疑问。其实网络爬虫是否被封IP还是要看

在线客服

QQ资讯

上班时间