最近在做的一个项目用到获取域名和IP的功能,大致有以下几种方法。

获取域名IP的方法可以使用内置的函数gethostbyname获取,例如:

echo gethostbyname("www.jbxue.com");  

以上则会直接输出域名所对应的的IP,当然各个地方测试的结果是不一样的,因为百度的服务器也不只有一台,我这边的ip是115.239.210.27; 
下面是获取域名的方法,例如有一段网址是这样的:http://www.jbxue.com/all-the-resources-of-this-blog.html

//则会输出www.jbxue.com
//全局数组
echo $_SERVER[“HTTP_HOST”];  

我在本地测试则会输出localhost 
第二种获得域名的方法则是使用:parse_url函数;

$url ="http://www.jbxue.com/index.php?referer=kakata.com";
$arr=parse_url($url);
echo "
";  print_r($arr);  echo "
“;  

这段代码获得一个数组,当我们打印这个数组,你会一目了然; 
Array 

[scheme] => http 
[host] => www.jbxue.com 
[path] => /index.php 
[query] => referer=jbxue.com 

scheme对应着协议,host则对应着域名,path对应着执行文件的路径,query则对应着相关的参数;

php 获取域名信息的第三种方法: 
同样是这一段域名我们使用第三种方法获取域名,我们采用自定义函数获得。

<!--?php <br ?--> $url ="http://www.jbxue.com/index.php?referer=jbxue.com";
get_host($url);
function get_host($url){
//首先替换掉http://
$url=str_replace("http://","",$url);
//获得去掉http://url的/最先出现的位置
$position=strpos($url,"/");
//如果没有斜杠则表明url里面没有参数,直接返回url,
//否则截取字符串
if($position==false){
echo $url;
}else{
echo substr($url,0,$position);
}
}
?&gt;  

最后一种方法则是使用正则了,这一步比较复杂,要实现复杂的域名匹配就得更复杂的正则,我只是简单的提供一下思路,大家多尝试。

<!--?php <br ?--> header("Content-type:text/html;charset=utf-8");
$url ="http://www.jbxue.com/index.php?referer=jbxue.com";
$pattern="/(http:\/\/)?(.*)\//";
if(preg_match($pattern,$url,$arr)){
echo "匹配成功";
echo "匹配到了".$arr[2];
}
?&gt;  

php获取客户端IP地址的几种方法
阅读php获取客户端IP地址的几种方法,
<?php
$iipp=$_SERVER["REMOTE_ADDR"];
echo $iipp;
?><?php
$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
echo $user_IP;
?><?php
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_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;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}echo get_real_ip();
?><?php
//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";
}
echo "你的IP:".$ip ;
?><?php
if(getenv('HTTP_CLIENT_IP')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$onlineip = getenv('REMOTE_ADDR');
} else {
$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
echo $onlineip;
?><?php
function getIP() /*获取客户端IP*/
{
if (@$_SERVER["HTTP_X_FORWARDED_FOR"])
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if (@$_SERVER["HTTP_CLIENT_IP"])
$ip = $_SERVER["HTTP_CLIENT_IP"];
else if (@$_SERVER["REMOTE_ADDR"])
$ip = $_SERVER["REMOTE_ADDR"];
else if (@getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (@getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");
else if (@getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");
else
$ip = "Unknown";
return $ip;
}echo getip();
?>1:来看看代码:echo "(1)浏览当前页面的用户的 IP 地址为:";echo $_SERVER['REMOTE_ADDR'];echo "";echo "(2)浏览当前页面的用户的 IP 地址为:";echo getenv('REMOTE_ADDR');echo "";echo "主机 www.baidu.com 的 IP 地址为:";echo gethostbyname(www.baidu.com);2:它的输出结果为:(1)浏览当前页面的用户的 IP 地址为:127.0.0.1(2)浏览当前页面的用户的 IP 地址为:127.0.0.1主机 www.baidu.com 的 IP 地址为:61.135.169.1053:关于获取客户端的 IP 地址,有俩方法:第一个是使用:$_SERVER['REMOTE_ADDR']它正在浏览当前页面用户的 IP 地址,这里的输出结果为 127.0.0.1,因为这是在本地测试,输出的是我本地的环路地址。第俩个是使用:getenv('REMOTE_ADDR')这里使用了函数 getenv : Gets the value of an environment variable(得到各种环境变量的值),返回值:Returns the value of the environment variable varname, or FALSE on an error(失败的话返回 FALSE).4:关于获取服务器端的 IP 地址:gethostbyname(www.baidu.com)这里使用了函数 gethostbyname : Get the IP address corresponding to a given Internet host name(通过给定的一个主机名字而得到它的 IP 地址),返回值:Returns the IP address of the Internet host specified by hostname or a string containing the unmodified hostname on failure(失败的话返回原样的输入字符主机名).5:注意这里的最后一句,也就是说,如果失败的话,它会将原样输出,
例如:  
echo "无效主机 iwilldown 的 IP 地址为:";  
echo gethostbyname("iwilldown");  
输出无效主机 iwilldown 的 IP 地址为:iwilldown  当然,这个可不是 IP 地址….~~~~

获取客户端ip其实不是个简单的活儿,因为存在Ip欺骗,和代理问题,所以获取客户端的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.

还看到过一个检测IP更详细的方法,考虑了IP的欺骗,和多重代理代码.方法相类似.

function getip() {$unknown = 'unknown';if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown) ) {$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];} elseif ( isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown) ) {$ip = $_SERVER['REMOTE_ADDR'];
}
/*
处理多层代理的情况
或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
*/
if (false !== strpos($ip, ','))$ip = reset(explode(',', $ip));return $ip;
}
 

一、没有使用代理服务器的PHP获取客户端IP情况:

REMOTE_ADDR = 客户端IP
HTTP_X_FORWARDED_FOR = 没数值或不显示

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

REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:221.5.252.160, 203.98.182.163, 203.129.72.215)
这类代理服务器还是将客户端真实的IP发送给了访问对象,无法达到隐藏真实身份的目的.

三、使用普通匿名代理服务器的PHP获取客户端IP情况:Anonymous Proxies

REMOTE_ADDR = 最后一个代理服务器 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_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:220.4.251.159, 203.98.182.163, 203.129.72.215)
这种情况下同样透露了客户端是使用了代理服务器,但编造了一个虚假的随机IP(220.4.251.159)代替客户端的真实IP来欺骗它.

五、使用高匿名代理服务器的PHP获取客户端IP情况:High Anonymity Proxies (Elite proxies)

REMOTE_ADDR = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 没数值或不显示

无论是REMOTE_ADDR还是HTTP_FORWARDED_FOR,这些头消息未必能够取得到,因为不同的浏览器不同的网络设备可能发送不同的IP头消息.因此PHP使用$_SERVER["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 获取的值可能是空值也可能是“unknown”值.

PHP获取域名及域名IP的方法相关推荐

  1. Java域名如何转换IP地址方法在这里

    //方法 String hostaddr = InetAddress.getByName("要转换的地址").getHostAddress(); //举例 String hosta ...

  2. ASP.NET站点使用IP或域名访问的connectionStrings配置方法

    ASP.NET站点使用IP或域名访问时,connectionStrings节的设置方法,域名无需在配置文件中设置,server只在路由器上设置好转发规则(端口)即可,服务器装好域名客户端即可 IP访问 ...

  3. python域名转ip_Python 实现域名解析为ip的方法

    今天得了一批域名,需要把域名解析成ip 因为量比较大所以采用了多进程和队列的方式 from multiprocessing import Process,Queue,Pool import socke ...

  4. 用服务器ip抓肉肉鸡还是域名稳定,牢牢抓住肉鸡ip的方法 -电脑资料

    以前弱口令泛滥于网上的时候,真是爽啊, 暂且不说经典的弱口令入侵了,那个相信大家都会.当时我难以解决的一个问题就是这些肉鸡只要一重起重新连接的话,ip每次都会变化的,菜鸟的我不会用反向的木马,一见加壳 ...

  5. 实时获取端口号和ip地址(域名)

    使用自定义获取端口号和ip地址(域名)window.location 在项目当中,很多项目是属于外包的,当项目做完就需要部署然后交给甲方,那么此时项目就不是我们负责 端口号,和域名,后期因为部署到服务 ...

  6. 获取工作组作为域名的方法

    获取计算机域名 项目要求获取计算机的域名, 代码使用了常用的API   GetEnvironmentVariable,wmi等方式获取,但是计算机的"系统属性->计算机名->更改 ...

  7. js 获取当前网站域名的方法

    上午在做一个小项目时,需要从后台取到网页的路径并在前台用JS代码组合成网址再跳转.难度不是很大,主要是需要用到 js 代码获取当前网址的主域名,那么这篇博文,飞鸟慕鱼博客就来和大家说一说,js获取当前 ...

  8. html 当前域名,js 获取当前网站域名的方法

    上午在做一个小项目时,需要从后台取到网页的路径并在前台用JS代码组合成网址再跳转.难度不是很大,主要是需要用到 js 代码获取当前网址的主域名,那么这篇博文,飞鸟慕鱼博客就来和大家说一说,js获取当前 ...

  9. python获取域名对应的ip_09python实现DNS查找域名对应的IP地址

    # DNS:是一个UDP层上边的协议,用于将域名转换成IP地址,在我们平时浏览网页的时候, # 这个我们平时用到的特别多的,在我们打开浏览器进行搜索网页的时候,不是填入IP地址进行 # 搜索的,而只是 ...

  10. 批处理获取计算机域名,用批处理获取局域网中电脑ip和mac地址表

    用批处理获取局域网中电脑ip和mac地址表 为了避免IP地址抵触和体系安全,局域网中电脑的IP地址和MAC地址对照表是要常常备份的.除了能够运用软件处理外,用细巧专心的批处理也是一个不错的挑选.用记事 ...

最新文章

  1. c语言是函数式原型的编程,编程范式|程序世界里的编程范式,探索编程本质
  2. Makefile:条件编译
  3. 零元学Expression Blend 4 - Chapter 1 缘起
  4. Struts2做下载
  5. 云程序备援--CAP
  6. 使用星际译王查词(安装字典和声音引擎)
  7. 以国家战略科学家身份,顶级AI学者朱松纯回国,筹建北京通用AI研究院
  8. oracle 空值的排序问题 (转载),sqlserver、oracle数据库排序空值null问题解决办法
  9. 标题栏透明android,android改变标题栏的透明度
  10. 2012.4.19总结(二)
  11. SQL获得当前时间函数(MySQL)
  12. Maven -- dependency详解
  13. MFC:Ribbon界面设计
  14. MySQL中的外连接和内连接
  15. Python/Basemap绘制美国人口分布示意图
  16. 机器学习实战- 回归(Regression) 概述
  17. 摘自《PPT设计思维》
  18. DirectSound开发指南
  19. 爬虫数据持久化存储——写入文件
  20. php用dre打开,php设计模式--适配器模式

热门文章

  1. WSO2学习笔记(一)
  2. emmagee邮件设置
  3. SDK学院--易接网游SDK中间件接入使用说明-Unity3D游戏接口
  4. bat 等待输入_继续提速——双拼的进阶,音形输入
  5. 苹果android投屏,iphone怎么投屏到mac?苹果手机投屏到苹果电脑方法
  6. Label mx条码软件导入Excel处理异常解决方法
  7. html倒计时星期日,功能齐全的jQuery倒计时插件
  8. 关务+物流领域的技术发展路线
  9. 火山视频在一键去水印网站上解析教程,火山视频去水印教程
  10. CSA发布云控制矩阵3.0版