使用了cdn,如何获取客户端真实ip?
来源:互联网 发布:淘宝取消退款申请手机 编辑:程序博客网 时间:2024/05/19 22:45
获取客户端IP,很多代码都会拿 HTTP_CLIENT_IP的值,其次拿 HTTP_X_FORWARDED_FOR,最后是 REMOTE_ADDR;但是如果网站使用了负载均衡(EBS) 和 内容分发(cloudfront)的话 ,获取ip就会麻烦一点,下面这段代码可以获取到使用了负载均衡和内容分发后客户端访问的ip。
以下内容是听取答案后的总结
1. HTTP_CLIENT_IP头是有的,只是未成标准,不一定服务器都实现了。
2. HTTP_X_FORWARDED_FOR 是有标准定义,用来识别经过HTTP代理后的客户端IP地址,格式:clientip,proxy1,proxy2。详细解释见 http://zh.wikipedia.org/wiki/X-Forwarded-For
3. REMOTE_ADDR 是可靠的, 它是最后一个跟你的服务器握手的IP,可能是用户的代理服务器,也可能是自己的反向代理。
关于伪造: HTTP_*头都很容易伪造。例如使用火狐插件伪造x-forwarded_forIP为 8.8.8.8,此时清掉cookie再访问http://www.58.com, 它会以为你是 8.8.8.8来的。参考: sf上另一个关于伪造IP的问题
一段不错的获取IP代码:
function get_client_ip(){ foreach (array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER)) { foreach (explode(',', $_SERVER[$key]) as $ip) { $ip = trim($ip); //会过滤掉保留地址和私有地址段的IP,例如 127.0.0.1会被过滤 //也可以修改成正则验证IP if ((bool) filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { return $ip; } } } } return null;}
0 0
- 使用了cdn,如何获取客户端真实ip?
- 如何查询使用了CDN的网站的真实IP
- CDN获取真实IP
- CDN获取真实IP
- 使用CDN后,获取真实IP 办法
- 获取使用CDN网站的真实IP
- 以cdn为前导,使用Nginx服务器反向代理,获取客户端真实ip的办法
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- ASP如何获取客户端真实IP地址
- Java如何获取客户端真实IP地址
- 如何获取客户端真实IP地址
- PHP如何获取客户端真实IP
- Java虚拟机学习(10):类加载器(ClassLoader)
- spring ioc 解耦方式的实现
- 什么是WEB?EJB?
- 用文件方式复制内容到另一个文件
- "严重: Null component Catalina:type=JspMonitor,name=jsp,WebModul Unsupported major.minor version 51.0
- 使用了cdn,如何获取客户端真实ip?
- Mysql系列(二)应用场所
- ORR 指令
- 2016.11.14回顾
- 线程的生命周期及JAVA对应函数
- Unfortunately you can't have non-Gradle Java modules and Android-Gradle modules in one project.
- 第十一周-OJ-B判断三角形
- java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
- Java对象的序列化和反序列化