`
lesorb
  • 浏览: 122498 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

获取用户IP地址的三个属性的区别及CakePHP之获取IP方法

    博客分类:
  • PHP
阅读更多
想要获取ip并不难,但是要获取准确的ip的确是值得探索的问题.
在使用代理,透明代理,匿名代理以及欺骗性代理服务器等等情况下,在获取客户端IP的时候,需要做相应的判断:

一、无代理服务器:

      REMOTE_ADDR = 您的 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用透明代理服务器:Transparent Proxies
   透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP.例如Garden 2程序.

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 您的真实 IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

三、使用普通匿名代理服务器:Anonymous Proxies
    使用此种代理时,可以知道你在使用代理,有些侦测IP的网页也仍然可以查到你的IP:

      REMOTE_ADDR = 最后一个代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

四、使用欺骗性代理服务器:Distorting Proxies

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 代理服务器 IP
      HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。

五、使用高匿名代理服务器:High Anonymity Proxies (Elite proxies)
    使用此种代理时,被访问的网站不知道你的IP地址,也不知道你在使用代理进行访问.此种代理的隐藏IP地址的功能最强.

      REMOTE_ADDR = 代理服务器 IP
      HTTP_VIA = 没数值或不显示
      HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

   完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象。

在PHP中获取IP的方法有:
1.简单的

$ip = ($_SERVER["HTTP_VIA"])?$_SERVER["HTTP_X_FORWARDED_FOR"]:$_SERVER["REMOTE_ADDR"];
$ip = $ip?$ip:$_SERVER["REMOTE_ADDR"];


2.复杂点的
//php获取ip的算法
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]){

	$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];

}elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]){

	$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];

}elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]){

	$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];

}elseif (getenv("HTTP_X_FORWARDED_FOR")){

	$ip = getenv("HTTP_X_FORWARDED_FOR");

}elseif (getenv("HTTP_CLIENT_IP")){

	$ip = getenv("HTTP_CLIENT_IP");

}elseif (getenv("REMOTE_ADDR")){

	$ip = getenv("REMOTE_ADDR");

}else{

	$ip = "Unknown";

}


在CakePHP中,如果加载了RequestHandler组件,则其中的getClientIP方法可以用来获取客户端IP:

$this->RequestHandler->getClientIP();


RequestHandler中源码:

	function getClientIP($safe = true) {
		if (!$safe && env('HTTP_X_FORWARDED_FOR') != null) {
			$ipaddr = preg_replace('/(?:,.*)/', '', env('HTTP_X_FORWARDED_FOR'));
		} else {
			if (env('HTTP_CLIENT_IP') != null) {
				$ipaddr = env('HTTP_CLIENT_IP');
			} else {
				$ipaddr = env('REMOTE_ADDR');
			}
		}

		if (env('HTTP_CLIENTADDRESS') != null) {
			$tmpipaddr = env('HTTP_CLIENTADDRESS');

			if (!empty($tmpipaddr)) {
				$ipaddr = preg_replace('/(?:,.*)/', '', $tmpipaddr);
			}
		}
		return trim($ipaddr);
	}


非常简单.
1
0
分享到:
评论

相关推荐

    PHP的框架之CakePHP-CakePHP教程

    CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP的HTML格式的教程;CakePHP的使用技巧介绍;CakePHP开发的网站源码参考;CakePHP的中文资料很少,大部分...

    cakephp分页.docx

    ### CakePHP分页详解 #### 一、简介 在现代Web开发中,高效地管理和展示大量数据是一项重要的挑战。为了确保用户体验良好并且服务器资源得到合理利用,开发者们常常需要实现分页功能。对于使用CakePHP框架的应用...

    最简单的方法来安装CakePHP

    标题中的“最简单的方法来安装CakePHP”表明我们将探讨如何以最简便的方式在你的开发环境中设置和安装CakePHP,这是一个非常流行的PHP开发框架。CakePHP以其MVC(模型-视图-控制器)架构模式,丰富的功能和易于学习...

    cakephp 框架1.3.11版本

    这个压缩包文件包含了有关CakePHP 1.3.11版本的信息,该版本发布于较早的时期,但仍然对理解早期的Web开发流程有所帮助。 首先,我们来详细探讨一下CakePHP框架的关键特性: 1. **MVC架构**:MVC模式是软件工程中...

    CakePHP 1.2 API 中文文档

    例如,通过 `$this->Article->find()` 方法可以轻松获取文章数据。此外,它支持CRUD(创建、读取、更新、删除)操作,简化了数据库的增删改查。 **组件(Components)与助手(Helpers)** 组件类似于可重用的代码块...

    PHP的框架之CakePHP-CakePHP教程终极教程

    CakePHP的中文及英文教程,CHM格式;CakePHP的中文打印版教程,WORD格式,下载后可直接打印,方便的;CakePHP的HTML格式的教程;CakePHP的使用技巧介绍;CakePHP开发的网站源码参考;CakePHP的中文资料很少,大部分...

    cakephp-containable行为behaviour

    而在CakePHP中,尽管模型操作方法没有类似ThinkPHP的连贯方式,但CakePHP引入了Containable行为来解决这个问题。Containable行为位于lib/Cake/Model/Behavior/ContainableBehavior.php文件中,它的主要作用是允许...

    CakePHP v2.3.0.zip

    MVC架构**:MVC模式是软件设计中的经典模式,将应用程序分为三个主要部分:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Controller)处理用户输入并协调模型和视图。在CakePHP中,这种...

    CakePHP使用ajax传值

    CakePHP框架中实现Ajax传值是通过AJAX (Asynchronous JavaScript and XML) 技术与后端的CakePHP控制器进行数据交换的一种方式。通常在Web开发中,Ajax用于创建更为动态和响应快速的用户界面。当用户与页面上的元素...

    cakephp-1.2 manual

    《CakePHP 1.2 手册》是针对该版本框架的重要参考资料,旨在帮助开发者深入理解和有效使用 CakePHP 进行Web开发。 CakePHP 是一个基于Model-View-Controller(MVC)架构模式的开源PHP框架,它简化了Web应用程序的...

    CakePHP路由

    ### CakePHP路由详解 #### 路由概念与作用 在Web开发中,路由是将用户的请求URL映射到特定的后端处理程序的过程。在CakePHP框架中,这一过程同样重要,它允许开发者通过简单的配置来管理URL的映射关系,从而实现...

    CakePHP框架指南

    1. MVC模式:模型-视图-控制器是软件工程中的一种架构模式,它将应用程序分为三个主要的组成部分,以分离内部表示(模型)、用户界面(视图)和控制逻辑(控制器)。CakePHP框架严格遵循MVC模式,这使得代码结构清晰...

    CakePHP PHP MVC框架

    - **访问脚本之家.html**:可能是一个关于CakePHP或其他PHP技术的文章链接,提供更多的学习资源。 - **readme.txt**:通常包含项目的基本信息、安装指南或注意事项,对于理解项目结构和运行要求很有帮助。 综上所述...

    CakePHP 3.4 开发手册文档 CakePHP Cookbook Documentation Release 3.4

    - **博客教程**:分三部分介绍如何构建一个完整的博客网站,包括用户认证和授权等功能。 - **内容管理教程**:演示了如何创建一个基本的内容管理系统,涉及数据库设计、文章管理、标签系统等多个方面。 #### 贡献...

    cakephp 框架

    视图与控制器交互,获取数据并渲染成用户可见的页面。 3. Controller:控制器是模型和视图之间的桥梁,接收用户请求,调用模型处理数据,然后将结果传递给视图进行显示。 三、主要特性 1. 约定优于配置:CakePHP ...

    cakephp中文手册

    CakePHP 解压后的目录结构主要包括以下三个主要部分: - **app**:应用程序的核心文件所在位置。 - **cake**:核心库文件,通常不应该直接修改。 - **vendors**:第三方类库存放的位置。 **2.2 app 目录详解** - ...

    cakephp详解

    `CakeRequest`还提供了环境自我检测的功能,例如可以获取HTTP头信息、客户端IP地址、服务器域名等信息。这对于进行条件判断和日志记录非常有用。 **3.4 访问请求参数** `CakeRequest`对象支持多种方式访问请求参数...

    phpmvc框架cakephp

    3. **路由系统**: CakePHP的路由机制允许开发者灵活地定义URL模式与控制器方法之间的映射,提供友好的URL给用户。 **二、MVC架构** 1. **模型(Model)**:模型处理数据和业务逻辑,与数据库交互,封装了数据操作...

Global site tag (gtag.js) - Google Analytics