当前位置:首页 > 互联网杂谈 > 正文内容

整理了一些获得ip地理信息的几种方法

老威3年前 (2018-02-17)互联网杂谈27671

第一种是利用纯真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地址,使用curl抓取网页

 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;
 }


 //新浪查询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_r("product");
    foreach($smartresult as $product)
    {
       $locations = $product->getElementsByTagName_r("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) "中国地质大学" } },而函数输出的结果则是“中国北京北京教育网学校中国地质大学”。

有很多玩黑帽SEO技术流量劫持的就用到这种ip获取方法,我们这里拿新浪的接口举例

<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js" charset="GB2312" ></script>
<script type=text/javascript>
 if(remote_ip_info.province =='济南'){
 }else{
  window.location.href="http://www.lwseo.cn"
 }
</script>


这里的意思是,只有济南的ip可以正常打开网站,除济南以外的ip打开的都是老威的网站。

扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由老威SEO发布,如需转载请注明出处。

转载请注明出处:http://www.lwseo.cn/hlw/57.html

分享给朋友:

相关文章

zkeys对接支付宝当面付教程及插件

zkeys对接支付宝当面付教程及插件

一、支付宝当面付开通链接:支付宝当面付当面付具体的开通流程支付宝官方都给出了解释,老威在这里就不在做强调了;二、下载zkeys接入当面付插件:zkeys插件直接解压到网站根目录即可三、zkeys后台设...

服务器防护软件有哪些比较好用

服务器防护软件有哪些比较好用

前段时间老威朋友的网站被黑了,并且是同一个服务器下的所有网站,老威大概研究了一下日志,最先是从一个gif文件上传进来,后来做了提权,不仅有了这个网站的权限,还提到了服务器admin用户的权限,导致所有...

[转]精益生产实施不成功的根源剖析与对策

[转]精益生产实施不成功的根源剖析与对策

精益生产实施不成功的根源剖析与对策蔡文欣  【摘要】:国内企业推行精益生产已有几十年的历史,但精益生产真正起作用的企业不多,能建立起精益生产系统的更鲜有耳闻。那么,中国企业推行精益生产为什么达不到预期...

利用sqlmap进行php+mysql注入(windows环境)

利用sqlmap进行php+mysql注入(windows环境)

老威SEO前段时间研究了一下sqlmap,其作为一款自动化的sql注入渗透工具,注入方式、注入成功后的取数据等等都是自动化的,非常适合我们这些小白前期玩玩渗透玩玩安全,它是用python写的,因此需要...

SEO博客为你讲述何为流量劫持

SEO博客为你讲述何为流量劫持

最近互联网打击越来越严格了,先不说快手抖音,内涵段子连整改的机会都没有了,真是让广大段友操碎了心,头条老大张一鸣的道歉看出来其强烈的求生欲望,甚至“今日头条要凉”等一类话题还在持续发酵时,又爆出一个热...

阿里云虚拟主机设置301重定向

阿里云虚拟主机设置301重定向

目前老威SEO博客是搭建在阿里云虚拟主机里面的,本来这个主机管理页面有一个301重定向的功能,设置好根域名跳转www域名之后我就没怎么管,直到昨天我才发现它只有这一个跳转,根域名其他的目录根本不能跳转...

评论列表

济南网站建设
3年前 (2018-07-30)

不错的方法!!

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。