你还在用这种方式获得ip?(php)
2012-12-11 15:17
176 查看
最近看网上大家介绍如何获得用户的ip似乎都一直都是这样写的,
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的ip
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理
然而 HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR 是非常容易伪造的,
根据上面的获取ip的逻辑,通过curl轻松伪造了用户的ip,服务端获得ip即是 8.8.8.8;
REMOTE_ADDR是服务器和客户端握手后建立的tcp连接的数据帧里的,在应用层是无法修改的。虽然不是绝对不可以伪造,但是难度确增加很多。
所以较简单的获得ip 的方法就是简单获取 REMOTE_ADDR的值即可
if (getenv ( 'HTTP_CLIENT_IP' ) && strcasecmp ( getenv ( 'HTTP_CLIENT_IP' ), 'unknown' )) { $onlineip = getenv ( 'HTTP_CLIENT_IP' ); } elseif (getenv ( 'HTTP_X_FORWARDED_FOR' ) && strcasecmp ( getenv ( 'HTTP_X_FORWARDED_FOR' ), 'unknown' )) { $onlineip = getenv ( 'HTTP_X_FORWARDED_FOR' ); } elseif (getenv ( 'REMOTE_ADDR' ) && strcasecmp ( getenv ( 'REMOTE_ADDR' ), 'unknown' )) { $onlineip = getenv ( 'REMOTE_ADDR' ); }
$_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的ip
$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理
然而 HTTP_CLIENT_IP, HTTP_X_FORWARDED_FOR 是非常容易伪造的,
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://shuai.com:81/index.php'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8')); curl_setopt($ch, CURLOPT_HEADER, 1); $out = curl_exec($ch); curl_close($ch);
根据上面的获取ip的逻辑,通过curl轻松伪造了用户的ip,服务端获得ip即是 8.8.8.8;
REMOTE_ADDR是服务器和客户端握手后建立的tcp连接的数据帧里的,在应用层是无法修改的。虽然不是绝对不可以伪造,但是难度确增加很多。
所以较简单的获得ip 的方法就是简单获取 REMOTE_ADDR的值即可
相关文章推荐
- PHP获得IP方式
- PHP获得客户端的IP
- php中获得客户端,服务器ip
- PHP获取IP的多种方式解析
- PHP获得的客户端和服务器端IP
- PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR[]转载
- php获得用户ip地址的比较不错的方法
- PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
- php;获得本地在局域网内的ip
- PHP获取用户真实 IP , 淘宝IP接口获得ip地理位置
- PHP获取用户真实 IP , 淘宝IP接口获得ip地理位置
- php-根据用户IP获得用户地址-新浪
- PHP 获得IP 运营商 物理地址
- PHP获得真实客户端的真实IP REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR
- 做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
- php搞定ip伪装的两种方式
- php 获得访问者的ip
- PHP获得用户使用的代理服务器ip即真实ip
- PHP获取用户真实 IP , 淘宝IP接口获得ip地理位置
- php获得客户端ip的几种方法