php 中获取远程用户ip的三种方式,并判定ip是否在一定的范围之内

PHP获取客户端IP地址方式 一、如果没有使用代理服务器 REMOTE_ADDR=客户端IPHTTP_X_FORWARDED_FOR=没数值或不显示$ip=$_SERVER['REMOTE_ADDR']; 二、使用透明代理 REMOTE_ADDR=最后一个代理服务器IPHTTP_X_FORWARDED_FOR=客户端真实IP(经过多个代理服务器时,这个值类似:221.5.252.160,203.98.182.163,203.129.72.215)   这类代理还会将客户真实ip发送到请求... 阅读详情

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址

2.HTTP_X_FORWARDED_FOR:浏览当前页面的用户计算机的网关

3.HTTP_CLIENT_IP:客户端的ip

在PHP 中使用$_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP 地址,而不是真正的客户端IP 地址。要想透过代理服务器取得客户端的真实IP 地址,就要使用$_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用$_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"]取到的值将是空的。

if($_SERVER['HTTP_X_FORWARDED_FOR'] &&preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$_SERVER['HTTP_X_FORWARDED_FOR'])){ 

     $onlineip = $_SERVER['HTTP_X_FORWARDED_FOR']; 

} elseif ($_SERVER['HTTP_CLIENT_IP']  &&preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$_SERVER['HTTP_CLIENT_IP'])){ 

     $onlineip = $_SERVER['HTTP_CLIENT_IP'];

}

获取用户IP地址的三个属性的区别(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)

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

REMOTE_ADDR= 您的 IP

HTTP_VIA= 没数值或不显示

HTTP_X_FORWARDED_FOR= 没数值或不显示

二、使用透明代理服务器的情况:Transparent Proxies

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

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

HTTP_VIA= 代理服务器 IP


在自己电脑上尝试,HTTP_X_FORWARDED_FOR  常量找不到,php版本为 PHP Version 5.3.8 。


<?php
$_G['thuip'] = 0;   // 标识是否该ip是清华ip
$userip = $_SERVER['REMOTE_ADDR'];
/* echo $userip;
gatewayip = $_SERVER['HTTP_X_FORWARDED_FOR'];
echo $gatewayip;
$ipMask = "255.255.0.0";
$userip = "59.66.23.45"; */ */
$userips = explode(".",$userip);
$ipAddrFirst = array(59,166,101,101);
$ipAddrSecond = array(66,111,5,6);
for($i = 0;$i<4;$i++) {
if( $userips[0] == $ipAddrFirst[$i] && $userips[1] == $ipAddrSecond[$i]
&& ($userips[2]>=1 && $userips[2]<=254 )
&& ($userips[3]>=1 && $userips[3]<=254 ) ){
$_G['thuip'] = 1;
}
}
echo "<br/>";
echo $_G['thuip'];
?>

PHP获取用户的真实IP 前几天面试的时候被问到通过$_SERVER['SERVER_ADDR']获取到的IP地址会有什么问题?那肯定是“如果用户通过的是 代理 获取不到真正的ip地址”。还好面试官没有进一步追问。那如何获取用户的真实IP地址呢?分析 现在许多用户并不是直接拨号上网,而是通过路由器或其他代理等方式访问网络。如果我们想要获取用户客户端的真实ip地址,就不能直接使用$_SERVER['SERVER_ADDR' 阅读详情

相关推荐

php判断IP地址是否在多个IP段内

php判断IP地址是否在多个IP段内,利用二维数组存储IP段

憨虫子的博客 2056

PHP获取IP的五种方法

【代码】PHP获取IP的五种方法。

sejinan的博客 3894

PHP根据用户ip获取用户地址

前言:之前写过一次使用淘宝接口获取用户地址,但是后面发现接口响应超时,导致请求失败,这次使用百度地图的定位接口获取用户地址(其他的地图也可以)。 去百度地图注册申请后直接创建应用: 获取地址只需要普通的ip定位就行,根据自己需求设置 获取创建的引用的AK值: 直接上代码 可参考官方文档选择对应的接口地址:http://lbsyun.baidu.com/index.php?title=webapi/ip-api /** * 获取登录Ip * @return mixed */ func

zq328525的博客 903

php获取ip地址

function getIP() { if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if (@$_SERVER["HTTP_CLIENT_IP"]) $ip = $_SERVER["HTTP_CLI

猿客行 1029

深入解析PHP中获取用户真实IP的方法

虽然PHP提供了内置的函数,但在某些特定的需求下,开发者可能需要自定义IP地址验证函数。下面是一个自定义函数的实现,它详细说明了如何通过正则表达式来验证IP地址的有效性。// 正则表达式验证IPv4地址:(?[0-9][0-9]?)\.){3}(?[0-9][0-9]?// 正则表达式验证IPv6地址在这个自定义函数中,我们使用了两个正则表达式,第一个用于验证IPv4地址,第二个用于验证IPv6地址。如果输入的字符串符合任一正则表达式的规则,函数返回true,否则返回。

weixin_42502040的博客 1571

PHP类库实现:高效获取用户真实IP地址

HTTP头部是每次HTTP请求和响应的一部分,它包含了关于传输的信息,但不包含消息的主体部分。HTTP头部对于理解请求的上下文以及如何适当地处理请求非常关键。对于一个服务器来说,头部中的IP信息尤为重要,因为它可以提供关于请求来源的宝贵数据,例如用户的真实IP地址。HTTP头部信息通常由一系列的键值对组成,例如:Host: 服务器的域名。User-Agent: 客户端的浏览器信息。Accept: 客户端能够处理的内容类型。: 发送到服务器的数据类型。

weixin_35761094的博客 1125

php获取远程访问的ip

1.方法一: /* * 获取用户ip */ public function get_client_ip(){ if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $cip = $_SERVER["HTTP_CLIENT_IP"]; }else if(!empty($_SERVER["HTTP_X...

qq_39634880的博客 702

php 获取本机外网/公网IP的代码

大家一般都是用$_SERVER[‘REMOTE_ADDR’]来获取用户IP, 但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。 经过我的研究有两种方法来获取用户的真实外网IP。 方法一:curl 复制代码 代码如下: function get_onlineip() { $ch = curl_init(‘http://www.ip138.com/ip2city.asp’); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $a = curl_exec($ch); preg_match(‘/\[

php 获取外网IP

$ip = $_SERVER["REMOTE_ADDR"]; echo $ip; 备注:以上代码需放在服务器上运行。如果在本地运行,结果是“::1”。

ycs_0405的专栏 563

Blender学习笔记——制作向量场

#下载Blender - UE4 - FGA Vector Field Editor插件的压缩包,Github上的下载地址如下:https://github.com/isathar/Blender_UE4_VectorFieldEditor #下载并解压后将FGA VectorFields文件夹复制到C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\addons目录下,此步骤可根据blender安装的位置自行调整,只要放入addon

wychao2020的博客 1725

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

php 是否在ip范围,如何检查PHP中IP范围是否私有?

标签:php我所见过的大多数有关在PHP中验证私有IP的问题都与验证特定IP地址是否为私有或IP是否在特定范围内有关.但是,我希望能够在PHP中确定IP范围,例如以. “ X.X.X.X-Y.Y.Y.Y”是一个专用范围.显然,我想查看整个范围是否为私有.例子:10.0.0.1-10.0.0.14将返回true,因为此范围内的所有IP都是内部IP.10.0.0.1-127.0.0.16将返回fals...

weixin_39977934的博客 153

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 419

python获取本地ip_python 获取本机IP的三种方式

python获取本机IP的方式第一种:#!/usr/bin/pythonimport socketimport fcntlimport structdef get_ip_address(ifname):s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)return socket.inet_ntoa(fcntl.ioctl(s.fileno(),...

weixin_39866646的博客 1303

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

分子动力学模拟学习1-采用AmberTools21的MCPB.py构建金属蛋白的top文件

weixin_45011386的博客 3824

LabVIEW Modbus TCP通信避坑指南:解决连接中断、服务器异常与自动重连问题

本文详细解析了LabVIEW环境下Modbus TCP通信的常见问题,包括连接中断、服务器异常等,并提供了自动重连机制的实现方案。通过优化错误处理、超时参数和资源管理,帮助开发者构建更稳定的工业级Modbus TCP客户端,显著提升通信可靠性。

weixin_42525211的博客 424

PHP获取用户的IP地址的3种方式详解

PHP获取用户的IP地址的3种方式详解 1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 3.HTTP_CLIENT_IP:客户端的ip 在PHP 中使用 $_SERVER["REMOTE_AD...

chuanguan1820的博客 611

【实践】VECTOR AUTOSAR创建SWC读写CAN信号

在AUTOSAR开发中最必要的功能就是读写CAN信号,本文通过一步步说明,介绍如何开发SWC来读写CAN信号,可以说在AUTOSAR中实现读写CAN信号的实践过程,是一个非常基础且典型的练习。在本篇文章阅读之前,推荐阅读AUTOSAR RTE介绍,本篇文章介绍了RTE的比较全面的介绍了AUTOSAR RTE。理解了RTE之后,才能对SWC的设计更加清楚。话不多说,接着上一篇内容VECTOR DaVinci从0到1搭建工程,此篇文章我们介绍如何在DaVinci Developer中开发SWC访问CAN信号。为

酒无忧的博客 1231

nginx三种获取用户真实ip的方法

随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户的真实IP地址,如果后端是apache,请跳转到&lt;apache获取用户真实IP地址&gt;,如果是后端真实服务器是nginx,那么继续往下看。 实例环境: 用户IP 120.22.11.11...

ronon77的专栏 2221

基于Python的Booking酒店数据爬虫实战:最新技术与完整代码解析

本文将详细介绍如何使用Python构建一个高效的Booking酒店数据爬虫,涵盖从基础爬取到高级反反爬技术的完整实现。我们将使用最新的Python爬虫技术栈,包括requests-html、Playwright、智能代理轮换等技术,并提供完整的可运行代码示例。文章将深入探讨爬虫的各个组成部分,包括数据提取、存储、反反爬策略以及性能优化等方面。关键词:Python爬虫、Booking数据采集、反反爬技术、Playwright、数据存储。

2201_76125261的博客 936

【2025CSPJ普及组】T4. 多边形

【2025CSPJ普及组】T4. 多边形【题目描述】小 R 喜欢玩小木棍。小 R 有 n 根小木棍,第i(1≤i≤n) 根小木棍的长度为 ai。

lybc2019的博客 849

php cli方式下获取服务器ip

(1)php cli方式下获取服务器ip function getServerIp(){ $ss = exec('/sbin/ifconfig eth0 | sed -n \'s/^ *.*addr:\\([0-9.]\\{7,\\}\\) .*$/\\1/p\'',$arr); $ret = $arr[0]; return $ret; } (2)php cgi方式下

噬魂归来的专栏 3555

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

php获取用户真实ip_开启CDN后,PHP获取用户真实IP的方法

因为近日需要几个小项目上CDN,但上CDN的同时,要获取到用户的真实IP地址。虽然网上有很多关于网站在CDN加速的情况下,PHP获取用户真实IP地址的方法,但总觉的不可靠,还是自己测试一下最好。PHP超全局变量$_SERVERPHP超全局变量$_SERVER,是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组,这个数组中也包含了...

weixin_32657693的博客 966

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

php获取ip所有方式,php获取用户(客户端)真实IP地址的三种方法

第一种方法,还算靠谱:function get_real_ip(){$ip=false;if(!empty($_SERVER['HTTP_CLIENT_IP'])){$ip=$_SERVER['HTTP_CLIENT_IP'];}if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){$ips=explode (', ', $_SERVER['HTTP_X_FOR...

weixin_42323064的博客 1098

php中判断某个IP地址是否存在范围内

看到网上很多各式可以ip地址的范围的方法,有用正则的,还有字符串截取的。自己试了很多感觉不怎么靠谱,一是有些不舍很准确,二是太伤性能了,又复杂。然后搜了很多资料,才找到个性能比较好的简单的IP地址范围判断的方法,在这里作个笔记记录一下。 IP地址库的话,纯真的不错:http://www.cz88.net/ 也可以使用网上接口来使用,但是有问题。你不能频繁的去用for循环来去访问,不然会被接口屏

我许我向您看齐 5140

php判断ip是否属于某个区段,php实现判断某个给定的ip地址是否在指定ip范围内

//判断某个ip是否在给定的ip范围内$ipRanges = array( array( '192.168.1.1' , '192.168.30.30'), array( '10.1.1.1' , '10.1.10.255' ) , array( '100.100.1.1' , '10.100.10.50' ) ); //给定的ip字段$localIp=$_SERVER["REMOTE...

weixin_42500866的博客 845
上一篇: wamp简单配置(更改phpmyadmin密码)
下一篇: Top 20 VMware Keyboard Shortcuts
hoppboy
博客等级 码龄17年 12粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值