IP 库的那些事儿之 2013 - 2014 流水帐版

@高春辉

2014 年 11 月

好吧,我先承认我写这篇文章的目的之一是希望各位能重视 IP 库,而不是某个开发人员随便从某些地方就下载一个用然后万年不更新,或者虽然更新,但是 IP 库本身不准确,导致你无法了解用户的真实情况。。。

不是科普文,也不是技术文,也不想讲太多这些吧,你们也没兴趣。:D

这件事要从我 2006、2007 年做 ECSHOP 开始讲起,当然扯的更远,得从 1999 年的金山卓越电脑资讯站的软件下载频道说起了,当时我们没有 CDN 可用,蓝汛那时候还没成立,只好自己在北京、上海、广东各自搞服务器,然后根据 IP 让用户确认和选择,跟目前分类和团购网站的做法类似,当时是我们的一个技术人员搞的这些,那时候我还不会 WEB 端开发。

还是说回 ECSHOP 吧,毕竟金山那时候不是我在搞 IP 库。

我们当年应用户的需求,在 ECSHOP 里内置了一个用户访问分析功能,于是问题来了,需要 IP 库,我也仔细研究过纯真版 IP 库,发现数据格式不够规范,而且我们也只需要到城市即可,网吧、公司信息啥的,可以忽略,我也测试过,基于以往的 QQWRY 的数据格式和读取算法,实现过于复杂,不够快。所以我花了一个礼拜不到的时间,重新设计了一个数据结构,我自认为结构简洁好理解而且解析速度快,结构和代码自此没大改过。大家能在 17MON 上看到的代码就是基于当年的,变化不大。

我们当时基于纯真的数据进行处理,随着 ECSHOP 版本发布过几次,最后应该是 2007 年的版本,卖给康盛之后,康盛又卖给商派,就没有人再更新过了。

去年,我好奇,下载了最新版 ECSHOP 的代码,发现搭载的 IP 库还是我当年维护的 2007 年的版本号。好吧,大家都不够重视。

之后的很长时间,都没再关注过 IP 库。

到了 2011 年下半年,我从手机之家离开,开始搞爱壁纸的事情,因为这是个图片型应用,主力是手机版,对下载的流量和速度很敏感,于是我们花了大量的精力去做针对图片的优化,从分辨率到生成质量再到文件格式,其中 CDN 是一个我认为很需要重视的事情,我们陆续和快网、蓝汛、网宿都合作了,但是有一个问题,我没法知道他们的节点情况,当然这也是所有人用 CDN 的一个共同问题。

于是乎,我写了一个程序,用于抓取分析国内各地甚至各国的 DNS 服务器,并且通过这些 DNS 对我们自己的 CDN 加速域名进行解析,以便获取各地的 CDN 节点情况。

这个时候,就发现,你即使知道了 IP ,但是可能没法知道 IP 是哪里的。比如鹏博士、比如一些机房不知道从哪里搞的 IP,也包括联通电信,再比如港澳台、亚太地区,关心的地域范围越大,越是头疼,因为总有变动,你跟不上就是个错。

这个时候,因为我们的业务进入了平稳期,我也有了一些时间研究这方面的事情,就有了 17MON 这个事情。

17MON 在最开始,其实是想做一个类似 17CE 的事情,但是希望能做的更好,因为有些需求和细节我们觉得 17CE 做的不够好。

而在其中具体做 traceroute 功能的时候,又发现没有一个好的 IP 库的话,展现的结果实在是没法看。还有我认为最应该改进的问题是不能逐行输出,执行时只能干等。

截个图证明一下。


这是 17CE 从香港到日本东京的 traceroute 情况的实际截图。那个 HOST 名字是错的,希望 17CE 的人看到的话,可以改改。:D

也许是在厕所里,要么是在出租车上,抱歉,我很多主意都在这些地方想到的。:D

我突然在想,做个 17CE 的克隆的兴趣我已经不大了,干脆只做 IP 库吧。

这个时候也和 CDN 的技术支持、销售,自己周围的朋友、同事讨论过这个事情,也研究过国外的情况,觉得这个事情虽然看着不大,但是是个利基市场,大家都有需求,自己维护很难很麻烦,基本都是兼职,一般跑不出前面提到的两种情况和结果,大的公司嘛还可以多一个选择,搞上几个人专门去维护,但是这事情想搞明白,也没那么容易,我后面再给大家讲。

既然说 IP 库是利基市场,国外的付费情况也还不错,我能看到的国外至少有 40、50 个网站在做这个服务,但是质量同样层次不齐,最有名的应该是 MaxMind。我也知道国内确实有人买他们的付费服务。而国内几乎没有人做付费版的 IP 库,即使有人做,我也不觉得做得有多好。因为基本上都是在一个档次上。无非是格式规范一些而已,而且能看得出来,都是以纯真的数据为原型。当然,各有各的难处吧,人家也只是提供一个选择而已。

在决定自己开工之前,我也曾经给纯真提供过数据,当时还是觉得这是个大工程,怕自己没法坚持下去,主要是时间和精力方面,你想想一个 40 岁的大叔天天坐电脑给你维护 IP 库的场景,我自己估计就先哭了。但是后来发现纯真对数据是没有验证的,当然就是想的话,可能也验证不了,你凭什么验证?没条件又没收入,能坚持做就不错了。所以这条路我就没再考虑了。不过从坚持角度上看,还是要为纯真的维护者叫好的,一个事情免费坚持做十年以上,五天更新一次,你试试?

既然考虑做,朋友们知道我一向的风格是,不走别人的老路,一个不能和别人拉开档次的事情,绝对不干。

于是就在琢磨如何做得更好。而维护 IP 库,当然是准确度的需求排第一,不准确要它干嘛?而如果完全是按照 WHOIS 抓的方式,我又觉得不够用,毕竟 WHOIS 信息已经有十几年历史了,肯定有不少信息已经不再准确,而且里面的国家到底是公司所在的国家还是 IP 所在的国家,你只能靠猜。

我又想辙,这时候在 BGP.HE.NET 上逛的多了,就会发现有个  AS 数据显示在 IP 所在页面上,我也不是搞网络工程师的,一开始也没注意,后来越来越发现,这个事情貌似和 IP 的地域有关,比如你要是北京联通的 IP,往往它会给你显示 AS4808,于是花了不少时间研究 BGP 这东西。

于是发现 ASN 是 BGP 的一部分,现代的互联网的互联互通,是靠 BGP 协议在起作用。

一般一个公司在维护一个网络的时候,高大上的方式都是去申请一个 ASN 号码,再申请属于自己的 IP,然后以这个 ASN 的名义广播出去,让全球的路由器都知道该通过什么样的网络路径去访问这些 IP。

到现在为止,全球的 ASN 数据有大概 70000 条,还在逐渐增加。

那么我就在想,能否根据这个数据来去做一个 IP 的围栏(地理名词,我借用一下,意思差不多),给每一个 ASN 做地域标注,比如 AS4808,就是中国北京联通,那么里面的 IP 列表,除了一些特殊情况外(ANYCAST 或者外拉带宽以及卫星上网等等),都应该属于中国北京联通。

虽然 ASN 数据 80% 的只能准确在国家层面,但是这也比乱标要好吧?即使不是乱标,你也不知道该如何更新数据。

而且如果我花足够的精力把所有的 ASN 都标注完了,那么我只要看所有的 ASN 的数据变化情况,就可以据此被动更新了,当然也有特殊情况,比如卫星上网,但是大部分的 IP 用这个方式维持更新即可。

还要说监测点,这也是我这个事情能做的比较准确,但也比较费钱的地方,就是我搞了国内几十个,国外比国内多,大概加一起,有 140 多个监测点,这样我在对一个 IP 做分析的时候,可以通过 traceroute 方式来辅助确认,而不是只看 WHOIS 信息这种静态方式。

理想情况下, 如果 WHOIS、ASN、TRACEROUTE 三者信息一致的时候,IP 对应的地域标注,就会非常准确了。不是吗?

于是,开干。

当然,上面说的,已经是接近成熟态的想法了。

中间,弯路,无数。

在我这里,SVN 里能够看到的 IP 数据文件第一次提交时间是 2013年 10 月 17 日。

到年底的时候,弄数据弄到眼花想吐,曾经一度想放弃,还是坚持住了。。。

到 2014年 11 月 9 日,我算是把 ASN 整体数据从头到尾过了一遍,去掉一些特别不好搞的 ASN 没有做标注以外,以快为前提,基本上完成了。

我吧,精力投入,这段时间内的几乎所有业余时间,连 FEEDLY 里的社会新闻,也没时间看基本上一键已读了,至于资金投入,我有大概 140 个监测点,平均一个点,按月费四分之一 5 美元,四分之一 10 美元,四分之一 15 美元,四分之一 20 - 25 美元算,比例没那么确切,我哭我的信用卡额度一直在涨。。。

当然,初期的 IP 库建设,还不能完全依照这个方式去搞,而且因为确实对 BGP/ASN 这些没那么熟悉,感觉可行,但是怕这个方式不行,所以开始的三个月,还是比较简单的依赖于对 WHOIS 信息的抓取和分析,并且会参照纯真、新浪、淘宝、腾讯这些 IP 库。

随着想法和数据的成熟,我后面这大半年,已经不再需要参考它们了,真的没有必要了。

而我需要的是地名互译,全球地图,更多的监测点。。。

说一些数据吧,现在都讲大数据。

IP 库数据条目数,目前 142000+ 条。

代码量,网站、命令行加一起,应该有 10000+ 行了。命令行比网站的多,因为大部分时候通过命令行进行信息的获取,比网站方便。

上个截图。


上面提到的 ASN 围栏数据,按 PHP 格式算,目前有 150000+ 行。

为了获取 BGP 基础数据,我们在荷兰阿姆斯特丹通过云主机的方式每日构建多次,分析代码需要 8GB 内存才能跑得起来。
数据吞吐量超过 5GB,最后形成的多个格式的文件加一起有 25MB。构建一次,需要两个半小时。我最需要的是凌晨一点左右跑完的那次,所以没有特殊情况的话,比如喝多了啥的,凌晨一点左右,我都会在线。。。

为了更好的查看,我们对 traceroute 结果当中 IP 的所在地非常在意,我们还有 8000+ 行的 PHP 版 HOST 解析代码。

我们从上半年公开到我们四月底五月初开始推付费服务,目前我们可以知道名字的客户至少有以下这些:


我们也在跟一些业界比较知名的公司谈合作,希望短期有结果,可以公开给大家说。

当然说了这些,你会说貌似很简单?好吧,纸上得来终觉浅,绝知此事要躬行!YOU CAN YOU UP!

说一下特殊情况吧,有很多种,比如 ANYCAST,这个 IP 在多个机房做广播,方便用户就近访问,多用于 DNS 和 CDN,最有名的应该是 GOOGLE 的 8.8.8.8/8.8.4.4,这种情况,在除了我们以外的 IP 库,大部分都标注成美国了。实际上这么标注是不正确的。

还有路由器 IP 段,这种情况,很有可能会跨地域,跨国家,x.x.x.1 在美国,可能 x.x.x.2 就在德国了。你如何搞?

还有更痛苦的,卫星上网,你又如何标注?

AND MORE AND MORE。。。

再具体的,你自己做做就知道了。我去见一个曾经维护过 IP 库的朋友聊天的时候,基本上就差抱头痛哭了。因为遇到的坑大部分是一样的。只是看谁能走出来,我说的维护方式,他也非常认可。

一并感谢一下吧。

BGP.HE.NET 启蒙了我。

17CE 没有你,就不会有 17MON,更不会有 IP 库。

纯真、新浪、淘宝、腾讯等等一堆 IP 库。

地图出版社的世界各国地图。幸亏只买了几个认为最重要的国家,后来发现意义没那么大,闲置中。还是用 Google Maps 吧。

价值 400 元人民币的国外地名译名大全,上下三册,发票还开错了。虽然还没怎么开始用。

在我们刚推出服务,就决定购买的几个公司,卡车之家、小米、缔元信、豌豆荚,其中缔元信是有 IP 每日反馈合作的,这对我整理 IP 很有帮助。

还要感谢几个朋友,蓝汛的白金,360 的宫一鸣,在 BGP 协议上回答过我不少问题,让我少走很多弯路,回头还有问题要请教。鹏博士的朱峰,老朋友了,鹏博士的 IP 数据,全靠他帮忙。还有信产部电信研究院的朋友,热心并且有实质性的帮助,希望有更多的合作。

还要感谢我的同事,虽然这个事情不太算是公司业务,但是也愿意花精力参与其中。

最后要感谢的是我的家人,还有出生还不到三个月的乖女儿,她要是闹起来的话,恐怕你年底都看不到我干完这个里程碑。

下面要干的几件事:

1、12月份,换域名,已经搞定了一个比  17MON 更适合做 IP 库的域名。
2、明年,涨价,现在的定价,我认为没有足够体现出我们的专业的价值,而且无论如何去计算,自己找人专职搞还是兼职搞,都不如使用我们的服务更合适,更别说专业程度了。
当然还要说的是,如果有足够多的付费用户的情况,我会考虑降价。
而目前,自掏腰包,亏损中。。。
3、英文版和对国外的付费服务,数据已经在同时构建,明年再对外,今年继续弄数据。
4、把经纬度和时区信息附加到一个新的数据结构里,提供给付费用户,目前的数据结构无法承担这么多数据的长度。明年。
5、初步细化每个 ASN 数据,争取从国家界别逐渐细化到城市级别。
6、花更多的时间研究 BGP 协议,写更多的代码做自动和手工的数据验证。
7、考虑针对 CDN/DNS 做定制版本。有空再了解一下 IPV6 的情况。
8、更多的监测点,希望在做虚拟主机以及云主机的可与我合作。我们会反馈给您赞助商链接。
9、有空主动出击找客户,现在数据方面有信心了,可以更有底气的找人去合作了。

所以,还是要问问谁有兴趣,共同来把这个事情做得更好,走出中国,迈向世界,做最好的 IP 库。

不缺钱,缺对此有兴趣的人。

北京,全职,写邮件给我。  gaochunhui@gmail.com

要吐槽的事情:
1、国内外主机以及网速的稳定性,实在是比较乱,今天好,明天坏的。实在是痛苦。VPS 还是云主机我就不吐槽了,我每天总有一些时间要花在查看云主机的稳定性上。更别说了交了不少学费。有空再专门写一篇有关 VPS 和云主机的吧。也有不少心得。
2、国内网络运营商在网络建设方面,确实比较落后,有政策问题,也有实操问题。有空再仔细吐槽。有兴趣的可以先看这个:https://github.com/17mon/LookingGlass 。

最后,还是恳请各位,如果您的工作中对 IP 库这块有一定的准确性需求的话,请尽量不要使用免费版,而是购买我们的付费服务,毕竟付费版的更新周期更快,数据更全,和免费版本有区别的,不然说不定哪一天,我就心灰意懒了,不是对钱有多渴求,而是希望借此看到大家对我卖力做事所消耗的时间精力所对应的尊重,国人向来付费习惯不好,总觉得不值这个钱或者自己也能干,反而在游戏、VIP 会员上不惜花钱也不讲价,自从应用商店出现,虽有改观,但是任重道远,我希望我这个事情也是个促进,你不认可别人的用心的价值,又何尝让别人认可你的用心的价值?话说我早年破解出身,但目前手中所用软件早已经基本正版化了。

最后最后,谢谢浏览我的流水帐式的文章到这里,为了报答您的耐心,你如果需要 IP 库付费服务,可以凭此文章链接找我打折,月底之前有效,当然,我希望你或者你的公司不差这个钱。。。:D

明年,再写 2015 版。。。

--------- 后记 ---------
1、最新的付费客户是 aipai.com 和 ele.me。我还是很欣慰的。
2、文章写的比较散,对此还有兴趣的可以看看我在 8 月份在 THINKPHP 大会上的演讲的 ppt。
     地址是:http://s.qdcdn.com/17mon/17mon-2014.pptx 
     数据有重合的地方,以本文章为准。
3、11/10/2014 把围栏监控代码写出来了,一运行,大约 20000 行,变化可能比想象的快,看来我的休息计划要延后到年底了。:-(

4、全文没写域名,这里写一下:http://www.17mon.cn/ ,网站上有付费计划,也有相关 FAQ,有兴趣的请仔细看。


原文地址:https://www.evernote.com/shard/s1/sh/ecaa734a-f53f-4b92-a65b-f4b5be7cb8f3/931d01e038fdd256

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值