当前位置:首页 > 新闻中心 > 解决方案 感谢一直陪伴的你们!

高防IP如何判断用户真实IP?

作者:夶夏      时间:2021-01-20 14:06:09

  机房专门提供的某一IP段就是高防IP,主要是针对网络中的DDoS攻击进行保护。在网络世界中,IP就相当于服务器的门牌号,无论是访问还是管理服务器,都是通过ip来进行。同理,如果一个网络攻击者想对目标进行DDoS攻击,都需要知道目标的IP地址,并用大量的无效流量数据对该IP的服务器进行请求,导致服务器的资源被大量占用,无法对正确的请求作出响应。同时,这些大量的无效数据还会占用该IP所在服务器的带宽资源,造成信息的堵塞。

  仅适用于网站类转发规则

  经过代理以后,由于在客户端和服务之间增加了中间层,所以服务器不能直接获取客户端的IP,客户端无法收到服务器端应用转发请求的地址。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR 、X-Real-IP信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

  它们有什么特点?

  X-Forwarded-For:一个 Squid 开发的字段,该项的添加只有可能是因为HTTP代理或者负载均衡服务器时才会成功。

  格式为X-Forwarded-For:client1,proxy1,proxy2,一般情况下,第一个IP为客户端真实IP,后面的为经过的代理服务器IP。现在大部分的代理都会加上这个请求头。

  X-Real-IP:nginx代理一般会加上此请求头。

  php获取客户端IP地方法如下

  1、REMOTE_ADDR

  2、HTTP_X_FORWARDED_FOR

  3、HTTP_CLIENT_IP

  4、HTTP_X_REAL_IP

  REMOTE_ADDR:客户端与服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。

  HTTP_CLIENT_IP:是代理服务器发送的HTTP头。如果是“超级匿名代理”,则返回none值。同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。

  $_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP

  $_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)

  $_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造)

  一、没有使用代理服务器的情况:

  REMOTE_ADDR = 地址 IP

  HTTP_X_FORWARDED_FOR = 没数值或不显示

  二、使用代理服务器的情况:

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

  HTTP_X_FORWARDED_FOR = 真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

  获取客户端真实的IP地址实例:

  /**

  * 获取客户端ip

  */

  function getClientIP() {

  $ip = "unknown";

  /*

  * 访问时用localhost访问的,读出来的是“::1”是正常情况。

  * ::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。

  * 使用ip地址访问或者关闭ipv6支持都可以不显示这个。

  * */

  if (isset($_SERVER)) {

  if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {

  $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];

  }elseif (isset($_SERVER["HTTP_X_REAL_IP"])) {

  $ip = $_SERVER["HTTP_X_REAL_IP"];

  }elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {

  $ip = $_SERVER["HTTP_CLIENT_ip"];

  } else {

  $ip = $_SERVER["REMOTE_ADDR"];

  }

  } else {

  if (getenv('HTTP_X_FORWARDED_FOR')) {

  $ip = getenv('HTTP_X_FORWARDED_FOR');

  }elseif (getenv('HTTP_X_REAL_IP')) {

  $ip = getenv('HTTP_X_REAL_IP');

  }elseif (getenv('HTTP_CLIENT_ip')) {

  $ip = getenv('HTTP_CLIENT_ip');

  } else {

  $ip = getenv('REMOTE_ADDR');

  }

  }

  if(trim($ip)=="::1"){

  $ip="127.0.0.1";

  }

  return $ip;

  }

  客户端的真实IP客户端如何获取?

  在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

  下面是一个参考获取客户端IP地址的方法:

  public String getClientIP(HttpServletRequest request) {

  String ip = request.getHeader("x-forwarded-for");

  if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  ip = request.getHeader("Proxy-Client-IP");

  }

  if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  ip = request.getHeader("WL-Proxy-Client-IP");

  }

  if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

  ip = request.getRemoteAddr();

  }

  return ip;

  }



免费客户服务热线:4006-618-418   027-87315200  87315211  业务咨询:15527777548    13260607300(微信同号)
业务咨询QQ:   欢迎光临老兵IDC 27325619   欢迎光临老兵IDC 81455950  欢迎光临老兵IDC 13640069   
技术支持QQ: 欢迎光临网盾科技 908624     技术支持电话:15307140247(微信同号)

公司地址:湖北省武汉市江夏区五里界街五园路16号

网盾运营中心:湖北省武汉市东湖高新技术开发区华师园北路18号光谷科技港1B栋4楼

《中华人民共和国增值电信业务经营许可证》: 鄂B1-20170032   
Copyright © 2007-  武汉极风云科技有限公司 All rights reserved. 鄂ICP备2020016614号-3

请所有客户积极遵守《中华人民共和国网络安全法》要求,合理合规的使用极风云数据的各类IDC云服务产品,网盾科技会遵照安全策略管理和安全制度的执行!