您的位置:首页 >文章内容
使用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
相关文章内容简介更多>>
最新标签
推荐阅读
  • 15 2019-08
    用代理IP发帖还会被封吗

    发帖对于推广人员来说都不陌生,是一种推广方式。无论是推广产品还是活动、服务器,都要在一些平台上发帖。一般平台为了保障环境,都会做出限制,每个用户的IP发帖量是有规定的。用户

  • 05 2018-09
    代理ip软件实现网络投票刷票

    网络投票的验证方式,参与过网络投票活动的朋友都知道,当我们给其中某一项投票后,马上进行再次投票

  • 22 2018-11
    代理IP服务器速度的影响因素

    随着互联网科技的快速发展,代理IP也越来越受到人们的欢迎,特别是对于一些专业的网络营销人员来说,这种代理是他们生活工作必不可少的工具

  • 26 2019-07
    如何使用动态代理IP并开启多线程做数据抓取?

    动态代理IP每隔3-5秒会更新一批IP,每秒钟最多请求10次。正因为有这些限制,所以合理使用动态代理IP才会事半功倍,否则会被这些限制牵制,影响抓取速度。

在线客服

QQ资讯

上班时间