您的位置:首页 >文章内容
使用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 2019-05
    IP代理高质量ip和普通代理ip有什么区别?

    ​IP代理普通ip和高质量ip,那么他们有什么区别,各有什么优势呢?普通IP代理,IP是公用的,就是很多人一起使用这些IP地址,普通ip代理拥有多个IP线路,可以满足大多数用户的需求。

  • 25 2019-10
    代理IP​在工作中的优势

    代理IP​在工作中的优势,想要高效快捷的完成工作任务,那么就必须要有高效优质的代理IP,为什么这么说呢?我们跟着迅速代理ip小编一起来看看高效优质代理IP在工作中的优势。

  • 20 2019-11
    动态IP代理​的作用有什么?

    动态IP代理​的作用有什么?从事网络工作的人都会遇上IP地址被限制的情况,这个时候我们一般是使用动态ip代理软件进行更换ip地址的操作,让ip地址发生变化从而防止影响工作和业务的效率。

  • 20 2018-11
    代理服务器的特点

    在社会高速发展的今天,代理服务器已经被广泛应用于很多场景了,这里给大家简单的介绍一下它。代理服务器(Proxy Server)是一种重要的服务器安全功能,

在线客服

QQ资讯

上班时间