Posts Tagged ‘ip’

IP邻居

星期四, 三月 5th, 2009

IP邻居是由我设计的可以通过IP反查域名的服务,(该网站同时有我爱水煮鱼的功劳,是由他注册了域名,我们这算合资公司吧,加上他是在美国Name.com注册的域名,所以我们这算中外合资公司。)

通过这个服务,你可以查看你的主机上有多少个域名绑定了同一个IP。

这个工具对于使用共享主机的朋友特别有用。在购买主机前,你可以通过这个工具查询一下你将要绑定的IP,如果该IP上已经绑定很多网站,那就要谨慎购买了。这个服务还贴心地提供了PR查询,Google收录,百度收录查询功能。如果百度对这个IP上的网站几乎都不收录,则该IP极有可能被百度封了,你的网站同样也会遭到这样的下场。

好了,更多好处自己亲自试试吧。记得这个网站哦! www.iplinju.com 也别忘了推荐给你的朋友 :)

Neekey API Services

星期天, 七月 27th, 2008

经过几天的努力,Neekey API services 总算让我搞定了 :)

这个API Services提供了Google Pagerank查询、图片调用,Alexa图片调用,以及上次提到的国旗调用服务等多种免费的Web服务。

扯点题外话,目前虽然网上有很多Google Pagerank,Alexa查询这样的服务,但我总感觉这些服务太商业化了,没有内涵,他们仅仅是关注数字这个表面的东西,而内部那些有价值的东西却很少关注。并且国内的网站都很小气,就拿提供一个Pagerank的图片来说,他们告诉你“不得修改代码,不得去除本站链接,否则永久停止服务,加入黑名单”,是不是很吝啬?我不否认使用他们的“免费服务”就应该给点链接上的回报,但我更喜欢一个开放、自由的互联网,也就是不能强制要求保留链接。这不是一个软件、程序,有GNU或CC之类的版权保护,更何况这个数据源还并非你提供的,怎么就没看见你的页面保留了Google的链接?更可笑的是国内一些“垃圾网站”的版权声明是这样写的

站内软件包含破解及注册码均由网上搜集,若无意中侵犯到您的权利,敬请来信联系我们.

未经本站明确许可,任何网站不得非法盗链及抄袭本站资源;如引用页面,请注明来自 XXX.COM,谢谢您的支持!

请大家看看这是什么强盗逻辑?自个儿到处“盗取”别人的东西,回头就不允许别人“盗取”你的?很可惜,目前国内很多提供Google Pagerank,Alexa这些服务的网站就是这样。而我做这个网站的目的,就是想让更多的博主能够享受Neekey API Services的开放、自由的服务。

从功能上来说,这个服务跟别的网站没有区别,主要就是查询网站的Google Pagerank值,还提供调用图片,一共有6种风格的图标可供选择。

做这个服务还得感谢Dianso的提醒。我原来一直以为调用的那个接口的某个参数是要系统计算的,后来Dianso告诉我,无论查询的网址怎么变,那个参数即使不变也是可以得到结果的,我测试成功后就做了这个服务。

Google 接口:http://www.google.com/search?client=navclient-auto&ch=6-1385476800&features=Rank&q=info:photozero.net

加粗的部分以前是要根据URL计算一个唯一值的,现在随便输入一个2位以上的数字就可以了,看来Google要放开PR的查询了。

网上有所谓的678个服务器的查询结果,其实就是把www.google.com换成不同的Google服务器的IP(如64.233.167.19 ),得到了678个相同的结果,还声称“可以根据不同的服务器返回值预测下次PR变化”。其实Google何止这678个服务器?如果想要,用扫描工具一扫就上千个IP,但实际上那么多IP,恐怕也多数是指向那几台主服务器。既然数据基本一样,又何必浪费Google资源做那么多无用功呢?

如果678个服务器的数据那么吸引人,下回我收集它几千个提供服务哈哈:)

这个是比较有趣的一个服务了。官方虽然也提供了图片调用的服务,但图片款式老土,且是用JavaScript调用,会影响页面打开的速度,所以还是推荐用我这个图片调用服务,纯粹的<img />代码,是不会影响页面速度的。

设计是我的弱项,所以也就用PHP的画图函数随便小弄了一下,看看效果:

分别是标准,古典,活泼风格,具体调用方法可以看演示Documents。下回还会增添更多的风格以及字体,敬请期待哦!特别推荐:活泼风格的图片真是很Cool的,字体会自动倾斜,彩字,而且每次效果都是不一样的。

而且调用这个图片还会提高你的网站的Alexa排名,你信吗?答案下回分解。

把原来存放在 http://photozero/api 的搬迁到 http://www.neekey.com/flag了,效果跟以前是一样的。原来有使用我的插件Reviewers_Info的朋友不用担心,它会自动转向到新地址的。而且我这个插件已经获得了官方Hosting,由于时间匆忙还没来得及发布,发布后您可以后台一键更新了。

  • 即将提供

这里说几个即将提供的服务或者其查询接口。

1.域名/IP Whois查询。虽然这个是纯粹站长用的工具(区别于一般的博客主),不过还是提供一下,而且不会很困难。目前提供这个服务的网站,要嘛速度很慢,要嘛仅仅是“Whois Server Version 1.3”,提供的信息太少,个人觉得万网(http://whois.hichina.com/)的接口是最好的,“Whois Server Version 2.0”,信息完整,速度超快,而且不用验证码。

2.Technorati。上次写了一篇 Technorati API教程,介绍了Technorati API的使用。Technorati的博客信息是比较有用的吧?那就提供博客信息查询服务好了。

3.微型博客链接平台。何为微型博客链接平台?就是一个简单的博客平台,超级简单,只要你的博客上放上一个<a href=”http://www.neekey.com”>Neekey API Services</a>,或者在调用PR图片、ALEXA图片的时候加上A链接,并且有人通过链接点击到这里,Neekey首页就会显示您的网站网址,不信您试试看。这个平台是为了方便大家交换友情链接,提升自己的PR值特别准备的 :)

好了,介绍那么多服务。如果你有自己的博客,还不试试?(只要我这个博客不倒,这些服务就会一直提供下去。也欢迎您提供创意和想法)

IP转物理地址的原理

星期六, 七月 12th, 2008

我最近刚做了一个根据IP显示所属国家国旗的PHP程序,这里讲讲它的实现方法。

首先,IP对应的国家是比较好查的,ICANN及其它几个机构都有关于某个IP段所属国家和ISP信息,并且他们基本上都提供了免费查询。但难题在于每个洲的管理机构不同,且数据量庞大,不易收集。将IP对应到某个国家的某个ISP后还要了结到它是分配给哪个地区(城市)的,比如中国电信福建分公司的IP段会分给厦门、福州等城市,而相对于这个就是比较难找了,可能ISP会有数据库会提供查询,可能也查不到,这些数据的来源就靠平时的积累、用户的贡献了。

当然,现在许多出名的数据库经过几年的发展已经比较完整和详细了,像免费的纯真数据库都有十几万条了,如过向国外的商业网站购买企业级应用的数据库,它的准确度就有点惊人了。国外的 ip2location.com 提供的数据库就是如此,作为一个英文数据库,它除了对美国等地区的数据比较完整以外,甚至中国的数据的精确程度都不亚于国内的数据库。它还提供了IP对应的经纬度,如果搭配Google 提供的Google Earth 的API,就可以在网页上看到Google Earth了。

就保存的方法来看,一般有一个文件(如纯真的QQwry.dat)或数据库。在数据量庞大(如几十万条)的情况下,用文件保存明显优于数据库,这一点在后面会详解。无论采用哪种方式保存数据,它的一般格式为:

起点IP,终点IP,国家,地区
33996344,33996351,United Kingdom,XXX

某 些比较详细的数据库还有ISP,国家缩略名,对应邮编,甚至该地的经纬度!起点IP,终点IP不是我们常见的 XXX.XXX.XXX.XXX的形式,而是一个8-10位十进制数字构成的。这也是为了便于数据的搜索。该数据由IP转换而成,在PHP中有 ip2long() 函数可以转换,自己也可以写一个相同的函数

  1. function dottedquad2long($ip){
  2. $ip_arr = split('\.',$ip);
  3. $iplong = (16777216 * $ip_arr[0]) + (65536 * $ip_arr[1]) + (256 * $ip_arr[2]) + $ip_arr[3];
  4. return $iplong;
  5. }

在一个文件的数据库中,通常每个数据间用某种间隔符间隔,当要查找一个IP如64.233.189.104,先将该IP转化为十进制数字 1089060200 ,再在文件中多次利用二分法查找该IP对应的区间,约通过10-20次查找,就可以准确地找到对应的位置了。

另外一种利用数据库保存数据的方法相比于文件的查找,PHP做的工作比较简单,但交给MySQL做的任务就比较艰巨了。现在一般的小型的数据库(如我找到的只有国家信息的数据),都有十万余条。要在那么多的数据库中查找一个区间,使用的时间倒不如用文件查找来得快。
关于查找数据在数据库和文件分别所用的时间我在上一篇文章中有提到过,一般来说用文件保存的数据查找速度明显优于数据库。

接下来就是我的完整的IP查询的方法了

数据库信息
数据库 ip 中表 ipdata 里面有:

id
startipnum 起点IP数字 如:33996344
endipnum终点IP数字 如:33996351
areaslug 国家/地区缩写 如:GB
area 国家全名 如: United Kingdom

  1. <?php
  2.  
  3. //调用的图片类型,默认gif
  4. if($_GET['imgtype'] == 'png'){
  5.     $imgtype = 'png';
  6. }else{
  7.     $imgtype = 'gif';
  8. }
  9.  
  10. //分析请求(支持IP,主机查询)
  11. if(!$_GET['s']){
  12.     $ip = $_SERVER["REMOTE_ADDR"];//无请求,查询访问者的IP信息
  13. }else{
  14.     $s = trim(strtolower($_GET['s']));//转换为小写
  15.     if(ereg('[a-z]',$s) && substr($s ,-1,1) != 'x'){
  16.         $ip = gethostbyname($s);//如果是主机,则转换为对应IP
  17.     }else{
  18.         if(substr($s ,-1,1) == 'x'){
  19.             $ip = str_replace('x','0',$s);//为用户隐私考虑,允许最后一位用英文字符x取代。
  20.         }else{
  21.             $ip = $s;
  22.         }
  23.     }
  24. }
  25. $ip = long2ip(ip2long($ip));
  26. $sip = sprintf('%u',ip2long($ip));
  27. //再进一步分析整理出合法的IP地址,并转换为数字形式,便于在数据库中查找
  28. $sql = "SELECT * FROM `ipdata` WHERE $sip >= `startipnum` AND $sip <= `endipnum`";
  29. //组织SQL在数据库中查找IP对应的区间
  30. $link = mysql_connect("localhost", "root", "");
  31. mysql_select_db('ip', $link);
  32. $result = mysql_query($sql);
  33. while ($row = mysql_fetch_array($result)) {
  34.     $return = $row;
  35. }
  36. //进行查询,得出结果
  37. if(!$return['areaslug'] || $return['areaslug'] == '-h'){//没有结果或结果位置,返回问号的图标
  38.     header('Content-type: image/png');
  39.     readfile('icon/png/other.png');
  40. }else{//根据调用格式不同分别调用对应的图标
  41.     if($imgtype == 'png'){
  42.         header('Content-type: image/png');
  43.         readfile('icon/png/'.strtolower($return['areaslug']).'.png');
  44.     }else{
  45.         header('Content-type: image/gif');
  46.         readfile('icon/gif/'.strtolower($return['areaslug']).'.gif');
  47.     }
  48. }
  49.  
  50. ?>

具体的数据库文件和完整的PHP程序我会在稍后打包提供。

根据IP显示国家国旗

星期五, 七月 11th, 2008

经过2天的开发,终于把这个能够根据IP地址显示国家国旗的程序开发出来了 :)

演示:

  1. 调用 <img src=”http://photozero.net/api/img.php”>
    显示 (无参数,显示访问者的国家国旗)
  2. 调用 <img src=”http://photozero.net/api/img.php?s=64.233.189.104“>
    显示 (输入需要查询的IP地址或主机如 www.google.com ,显示该IP/HOST的国家国旗)
  3. 访问  http://photozero.net/api/xml.php?s=64.233.189.104
    用XML文件显示该IP的相关信息如:
    <?xml version="1.0" encoding="UTF-8"?>
    <ipquery>
    <query s="64.233.189.104" />
    <return status="1" ip="64.233.189.104" country="United States" countryabbreviation="US" img="http://photozero.net/api/icon/png/us.png" />
    <info runtime="0.1131010055542 s" />
    </ipquery>

需要用的朋友去试试,我的Reviewers_Info插件也会尽快添加这个功能。

做这个程序主要有2个难点:

一.IP数据来源,国内有纯真IP数据库,但它的国家、地区是用中文储存的,而该程序需要用到2位字符的国家英文代码(如 cn,us)作为图片的链接(如 http://example.com/cn.png),纯真数据库并没有提供,且纯真数据库虽然提供较完整数据,但相对于只需要国家代码,存那么多的数据就有点臃肿了。所以只能用国外提供的数据库了。上Google搜一下,国外某些数据库还是不错的,但都是企业级应用,动辄上百上千$的费用不是我能支付的。后来找到了与Firefox插件Flagfox中使用相同数据的http://geotool.servehttp.com,并通过链接找到了Maxmind(不知为何这个网站被瑞星防火墙阻挡了)提供的数据库,这个数据库数据比较整洁,只有起止IP、国家英文名、国家缩略名如:

“2.6.190.56″,”2.6.190.63″,”33996344″,”33996351″,”GB”,”United Kingdom”
……
……

这个数据库不错,它是CVS格式的,我又费了好些时间将它导入到MySQL数据库中。接下来就好办了,输入一个IP就容易得出国家信息了。在效率方面,使用Coolcode写的利用 QQWry.Dat 实现 IP 地址高效检索(PHP)的方法(从DAT文件中搜索)每搜索一次约耗时 0.01-0.1秒,而该程序利用数据库搜索(约10万条数据),约耗时0.1-0.2秒,虽然耗时长了点,但还在可以接受范围内的。

二.国家国旗数据,在百度上找的国旗数据,不是不够完整就是图片太丑陋,显示效果一般,或者是没有匹配的杂乱排序,如 015454.gif 这样的文件名,难道叫我来分辨200多个国家地区?最后终于在FAMFAMFAM找到了完整的国旗,并配有 GIF/PNG 格式,大小普遍在16*11左右(少数国旗非常规形状除外,如尼泊尔),其命名规则也是 cn.png jp.png 这样的格式,刚好满足我的要求。

终于写好了~~~~~~前面走了不少弯路,太累了。希望看到的朋友都支持一下,或者下载Reviewers_Info这个插件试用一下~~~~~~