很多站长朋友们都不太清楚php获取代理ip,今天小编就来给大家整理php获取代理ip,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php 怎么获取内网IP? 2、 PHP如何获取客户端真实IP 3、 PHP实现代理IP 4、 php 获取真实IP,区分代理IP 5、 PHP获取客户端外网ip代码? 6、 如何使用PHP获取客户端及服务器端IP的封装类 php 怎么获取内网IP?ip地址分 IPv4和IPV6两个版本。
127.0.0.1或者192.168.0.1之类的,属于IPV4的格式
127.0.0.1转换为IPv6就是 ::1
IPv6具体的格式写法,你搜索一下了解一下。
另外 ,服务端获取ip地址,是相对的。比如你在局域网内建一个服务器,在程序里获取的ip地址,就是客户端在局域网的ip ,一般是类似 192.168.0.101 之类的,大公司的话可能 10.x.x.x
局域网的ip地址,可以直接在网络适配器上看到
而在inter网,也就是大网络上,服务端获取的ip地址,是你的连网设备获取到的公网ip ,一般一个局域网内的主机,相对于因特网上的服务器,显示的都是公网地址。
公网ip没有在本机电脑上直接显示。会显示在路由或者连网设备上。也可以通过百度搜索 ip地址,会显示你的公网ip
所以,假设一个局域网内,有两台电脑同时访问一个网上的服务器,服务器是没办法给两台电脑区分开ip地址的,显示的是一样的。只是可能得到的设备信息不一样(如:浏览器的useragent)
PHP如何获取客户端真实IP如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。
下面提供一个函数:<?php
// 定义一个函数getIP()
function getIP(){global $ip;
if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");else$ip = "Unknow";
return $ip;}
// 使用方法:
echo getIP();?>
getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。
这种情况下已经确认客户端没有使用代理服务器,从而通过
else if(getenv("REMOTE_ADDR"))
PHP实现代理IPPHP程序在服务器上运行,不在浏览者的机器上运行,只是把运行生成的HTML结果发送给浏览者的浏览器程序,不可能修改浏览者的代理设置。
PHP可以修改服务器机器的代理设置,方法是修改注册表。
php 获取真实IP,区分代理IP使用php获取IP的方法能找到很多。
function getIp(){
if (getenv("HTTP_CLIENT_IP") strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) $_SERVER['REMOTE_ADDR'] strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
}
对这段代码进行解释,这里用到了两个函数,getenv()和strcasecmp(),前一个函数获取得系统的环境变量,如果能取到值,则返回该值,不能则返回false.
$_SERVER是服务器超级全局变量数组,用$_SERVER['REMOTE_ADDR']同样可以获取到客户端的IP地址.二者的区别在于,getenv不支持IIS的isapi方式运行的php.
strcasecmp(string1,string2)字符串函数的用法是把string1和string2进行比较,如果相等返回0,如果string1大于string2,返回大于0的数,小于则返回小于0的数.
函数先使用客户IP,如果不成立尝试用代理的方法,如果不行,再使用REMOTE_ADDR。
PHP获取客户端外网ip代码?function get_real_ip()
{
$ip=FALSE;
//客户端IP 或 NONE
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
//多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
//客户端IP 或 (最后一个)代理服务器 IP
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
如何使用PHP获取客户端及服务器端IP的封装类本文实例讲述了PHP获取客户端及服务器端IP的封装类。分享给大家供大家参考,具体如下:
客户端IP相关的变量:
1. $_SERVER['REMOTE_ADDR']; 客户端IP,有可能是用户的IP,也有可能是代理的IP。
2. $_SERVER['HTTP_CLIENT_IP']; 代理端的IP,可能存在,可伪造。
3. $_SERVER['HTTP_X_FORWARDED_FOR']; 用户是在哪个IP使用的代理,可能存在,可以伪造。
服务器端IP相关的变量:
1. $_SERVER["SERVER_NAME"],需要使用函数gethostbyname()获得。这个变量无论在服务器端还是客户端均能正确显示。
2. $_SERVER["SERVER_ADDR"],在服务器端测试:127.0.0.1(这个与httpd.conf中BindAddress的设置值相关)。在客户端测试结果正确。
类如下:
class getIP{
function clientIP(){
$cIP = getenv('REMOTE_ADDR');
$cIP1 = getenv('HTTP_X_FORWARDED_FOR');
$cIP2 = getenv('HTTP_CLIENT_IP');
$cIP1 ? $cIP = $cIP1 : null;
$cIP2 ? $cIP = $cIP2 : null;
return $cIP;
}
function serverIP(){
return gethostbyname($_SERVER["SERVER_NAME"]);
}
}
$getIP = new getIP();
$clientIp = getIP::clientIP();
$serverIp = getIP::serverIP();
echo 'Client IP is ',$clientIp,'<br />';
echo 'Server IP is ',$serverIp,'<br />';
关于php获取代理ip的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php获取代理ip phproxy代理的详细内容...