`
peizhiinfo
  • 浏览: 1494491 次
文章分类
社区版块
存档分类
最新评论

获得ip地理信息的几种方法【最全】

 
阅读更多
第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。

第二种是利用门户网站的接口

目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得到的只有腾讯、新浪和网易的,Google的貌似要用Google Maps所以没有研究。看了下国内的几个腾讯提供的是JavaScript的,网易提供的是XML,而新浪的有多种格式可以用,注意非XML的数据源都是GBK格式的,不管是JavaScript调用还是PHP调用都要转换一下编码,不然得到的是乱码。而更需要注意的是,如果一次性查询多个IP,使用门户网站的API来查询会非常缓慢,我大概写了个for循环试了下,不管是用PHP解析XML还是file_get_contents()函数获取内容,查询10次以上会变得非常缓慢,甚至可能超时。

腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress,返回的是数据格式为:var IPData = new Array("123.124.2.85","","北京市","");,一个JavaScript的对象,目前还不知道如何输入IP查询。

新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js

新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=123.124.2.85

网易有道的IP地址查询接口:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85

使用JS代码进行调取腾讯的api接口
查看源代码打印帮
<script language="javascript" type="text/javascript" src="http://fw.qq.com/ipaddress"></script>
<script>document.write("你的IP是:"+IPData[0]+",来自:"+IPData[2]);</script>
//腾讯API的PHP调用方法
function getIpPlace(){
$ip=file_get_contents("http://fw.qq.com/ipaddress");
$ip=str_replace('"',' ',$ip);
$ip2=explode("(",$ip);
$a=substr($ip2[1],0,-2);
$b=explode(",",$a);
return $b;
}
$ip=getIpPlace();
print_r($ip);
//调用查询接口需要抓取网页,有三种方法,第一种是curl,第二种是
//file_get_contents,第三种fopen->fread->fclose,推荐第二种方法

/*
*根据腾讯IP分享计划的地址获取IP所在地,比较精确
*/
function getIPLoc($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
$result = curl_exec($ch);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
curl_close($ch);
preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}




//根据腾讯接口查询ip地址,使用file_get_contents抓去网页
function getIPLoc($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$result = file_get_contents($url);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
//根据腾讯接口查询ip地址,使用fopen->fread->fclose抓去网页
function getIPLoc($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$handle = fopen ("$url", "rb");
$result = "";
do {
$data = fread($handle, 1024);
if (strlen($data) == 0) {
break;
}
$result .= $data;
} while(true);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}



/********注:
1.使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置allow_url_fopen = On,allow_url_fopen关闭时fopen和file_get_contents都不能打开远程文件。
2.使用curl必须空间开启curl。方法:windows下修改php.ini,将extension=php_curl.dll前面的分号去掉,而 且需要拷贝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安装curl扩展*****/
//新浪查询ip接口 第五个第六个是地理信息
function getiploc($IP_ip){
$IP_str = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip='.$IP_ip);
if(!empty($IP_str)){
$IP_tmp = explode(" ", $IP_str);
$IP_city = iconv("GBK", "UTF-8", $IP_tmp[5]);
return $IP_city;
}



//有道API的PHP调用方法
$url = "http:www.youdao.com/smartresult-xml/search.s?type=ip&q=".$ip;
$doc = new DOMDocument();
$doc->load($url);
$smartresult = $doc->getElementsByTagName("product");
foreach($smartresult as $product)
{
$locations = $product->getElementsByTagName("location");
$location = $locations->item(0)->nodeValue;
}
if($location != "")
{
echo $i.".".$ip;
echo " 来自".$location."的网友";
}
else
{
echo $i.".".$ip;
echo " 来自火星的网友";
}
public function sinaIPApi($ip){
$str = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);
$str = iconv("gbk", "utf-8//IGNORE", $str);
preg_match_all("/[\x{4e00}-\x{9fa5}]+/u",$str,$get);
$add = implode('',$get[0]);
return $add;
}
//$get是一个非常棒的二维数组

其中有道和新浪的是我自己写的,新浪API也可以像腾讯API那样用file_get_contents()函数获取完地址后使用一连串的字符串函数处理,我写的函数使用正则表达式从新浪的返回结果中提供包含中文的字符串,并且分段存入一个二维数组,这个可能只是针对新浪的API有用并且存在bug。举个例子查询学校分配给我的IP地址后var_dump()一下函数里面的$get变量得到以下结果: array(1) { [0]=> array(6) { [0]=> string(6) "中国" [1]=> string(6) "北京" [2]=> string(6) "北京" [3]=> string(9) "教育网" [4]=> string(6) "学校" [5]=> string(18) "中国地质大学" } },而函数输出的结果则是“中国北京北京教育网学校中国地质大学”,希望我的思路和方法能对别人有用。

最后再次提醒,如果是WordPress请使用第一种方法,否则使用API同时查询所有留言者的真实地址会让PHP超时的,希望各路大牛有更好的方法,至于限制显示和显示方式等神马的都是WordPress应用问题,同时对于Java和C#来说思路也是一样的,这些后续的问题等我考完试再细说。

分享到:
评论

相关推荐

    比较全的获得ip地理信息的几种方法小结

    总结来说,获取IP地理信息的方法多样,选择哪种方法取决于具体的应用需求和场景。门户网站提供的API接口适合于快速部署和开发,但存在查询速度慢的问题;纯真数据库适合于自行搭建服务,更新频率可能较低。在编程...

    IP地理位置查询系统

    系统的工作原理通常基于以下几种方法: 1. **IP数据库**:这是最常见的方法,通过预先构建的IP地址到地理位置的数据库进行查询。这些数据库由ISP(互联网服务提供商)提供,包含了IP地址段和对应的国家、城市、...

    ip地址与地理位置对应表

    - 地图定位:结合GIS(Geographical Information System,地理信息系统),可以将IP地址对应到地图上,显示具体的位置。 - 网络安全分析:例如,识别潜在的DDoS攻击源,或者监控特定地区的网络活动。 - 内容本地化:...

    易语言IP地理位置查询模块

    例如,可能需要初始化到一个提供IP地理信息的第三方API接口。 2. **GetLong** 和 **GetLong3**:这些函数可能用于从IP地址字符串中提取出整数值,因为IP地址通常由4个0-255之间的数字组成,每个数字用点号分隔(如...

    根据ip识别地理位置

    获取IP地址的地理位置信息主要有以下几种方法: 1. DNS反向查询:通过DNS服务器查找与IP对应的域名,然后分析域名注册信息,获取注册者的地理位置。 2. 服务提供商API:使用第三方提供的地理位置API,如Google ...

    PHP实例开发源码—Emlog显示评论者IP地理信息插件 php版.zip

    总结来说,这个"PHP实例开发源码—Emlog显示评论者IP地理信息插件 php版.zip"是一个展示PHP编程技能和Emlog插件开发能力的项目。它涉及到IP定位技术、HTTP请求、模板引擎、数据库操作以及可能的多语言支持等多个方面...

    电信设备-一种IP地址归属信息索引方法及快速查询方法.zip

    "电信设备-一种IP地址归属信息索引方法及快速查询方法.zip"这个压缩包文件内容聚焦于如何高效地处理和检索IP地址的相关信息,尤其适用于大规模网络环境下的电信设备。下面将详细阐述其中涉及的知识点。 首先,IP...

    网络编程_IP定位_中文输出_地理信息查询_1741399056.zip

    Python作为一种广泛应用于网络编程的语言,其简洁的语法、强大的库支持和良好的社区生态,使其在处理IP定位和地理信息查询等任务时,具有得天独厚的优势。Python中的多个库和框架,如requests用于发送网络请求,...

    ip地域对照表及使用方法

    使用IP地域对照表有多种方法,下面列举几种常见的应用场景: 1. **网站统计**:网站管理员可以利用IP地域对照表来分析用户来源地,了解不同地区的访问量,优化用户体验或制定营销策略。 2. **安全防护**:网络安全...

    在线IP地理精确位置查询PHP源码.zip

    这个源码包主要用于开发Web应用,帮助网站或服务提供者追踪和展示用户访问时的地理信息。PHP是一种广泛使用的服务器端脚本语言,特别适合于Web开发。 源码的核心功能可能包括以下部分: 1. **IP地址解析**:首先,...

    python项目实例源码 实例-11 根据IP地址查对应的地理信息

    在本Python项目实例中,我们将探讨如何利用IP地址获取对应的地理信息。这涉及到网络编程、IP解析以及地理定位等技术。IP地址与地理位置之间的关联主要通过API服务来实现,例如MaxMind的GeoIP数据库或者公开的IP定位...

    易语言IP地理位置查询模块源码

    在该"易语言IP地理位置查询模块源码"中,我们可以看到以下几个关键组成部分: 1. **QQWry.dat**:这是一个IP数据库文件,通常包含了大量的IP地址与地理位置的对应关系。QQWry是基于著名的IP数据库“Dnsmasq”的一个...

    ip数据库,包含两种常用的ip数据库

    这些数据库通常包含了全球范围内的IP地址段和其对应的国家、地区、城市等地理信息,对于网络监控、网络安全、广告定向、数据分析等领域有着重要的应用。在这个压缩包中,我们有两个文件:`ParseQQWry.pas` 和 `...

    IP探针系统_IP探针_ip探针链接_ip探针软件_ip探针xml网站_ip探针官网_

    它们可能包含多种功能,如实时监控、IP地理位置定位、网络日志分析等,以便于用户更好地理解和控制网络活动。 IP探针XML网站可能是指使用XML格式提供IP探针数据的服务,XML(可扩展标记语言)是一种数据交换的标准...

    最全最新的中国全国IP段,2亿多IP

    ### 最全最新的中国全国IP段解析 #### 一、引言 随着互联网技术的迅猛发展,IP地址作为网络通信的基础,对于确保数据准确无误地传输到目标设备至关重要。了解和掌握特定区域内的IP地址范围,对于网络安全管理、...

    PHP利用纯真IP数据库在本地实现IP地址信息查询(无乱码)

    纯真IP数据库通常是中国的一个开源IP数据库,包含了丰富的IP地址段、城市、地区等地理信息,广泛应用于网站的IP定位服务。 首先,我们要理解PHP的基础知识。PHP是一种广泛使用的开源脚本语言,尤其适合Web开发,...

    纯真IP整理器直接提取IP数据库关键字为纯真数据

    1. **IP数据库**:IP数据库是一种包含全球IP地址及其关联地理信息的数据集合,对于网络服务提供商、网站管理员和开发者来说,它可以提供网络流量分析、用户定位、反垃圾邮件过滤等功能。 2. **纯真IP数据库**:中国...

    最全最新的ip地址库

    本文将详细介绍“最全最新的IP地址库”及其相关知识点。 首先,让我们了解一下IP地址。IP(Internet Protocol)地址是互联网协议地址的缩写,是一种在互联网上唯一标识网络和设备的数字标签。IP地址通常采用IPv4或...

    如何获得对方主机IP地址?

    本文将详细阐述几种常见的方法,帮助您在不同的场景下成功获取目标主机的IP地址。 #### 方法一:邮件头部信息分析 电子邮件不仅是日常通信的重要工具,其头部信息还隐藏着发送方主机的IP地址。当您收到一封邮件时...

    ASPdotnet获得客户端的IP

    在ASP.NET中,获取客户端IP地址的方法主要有以下几种: 1. 使用`Request.ServerVariables`集合: 可以通过`Request.ServerVariables("REMOTE_ADDR")`来获取客户端IP地址,这是最直接的方法。但要注意,如果服务器...

Global site tag (gtag.js) - Google Analytics