最新多种方式, 判断客户端IP是国内还是国外
1、前言如何根据IP判断是国内的IP还是国外的IP呢?
应用场景大多是网站开发时中英文版本的自动判断。
相信大多数人肯定会推荐淘宝的免费API,但是目前已经无法访问,并且也很不稳定。
那么,问题来了,除了这些看起来不太靠谱的方法,还有其他实现方法或者第三方方法吗?
答案是当然有,付费的有,我们这里只讲一些免费第三方的方法和可以自己实现的方法。
我们的需求是只需要判断IP是国内外,而不需要判断IP的具体城市,所以问题变得简单了许多。2、实现方法2.1、第三方库
比较强大的第三库,不得不推荐MaxMind的GeoIP®DatabasesandServices,他们有自己的IP库,提供各种准确的接口,付费的可以根据定位很准确,不付费的只可以模糊定位到国家,不过已经符合我们的需求。
通过这个免费的javascriptAPI,就可以判断当前IP是否是国内外,因为我开代理测试的,所以显示当前IP是新加坡。
MaxMind的其他实现方式,有的是需要付费,按次收费,获取到的数据也会更加详细更加准确。2.2、自己实现
上一个方式是借助第三方免费API判断IP所在国家,那么如果是我们做,该怎么做呢?
我们只需要判断IP所在国家是国内外即可。
首先我们需要获取IP库,通过IP库判断;
ip库在apnic的官方网站上可以下载
那么我们该如何处理呢?总体上分为以下几个部分:
1、使用脚本定期从apnic``下载IP库,筛选出所有apnic|CN|ipv4,生成china_ip.txt其实这里如果只判断CN不太准确,HK、MO和TW被apnic分成单独的,他们都是中国的领土不可被分割,不过我们这里不增加这个逻辑了,所以确切这个文本内的IP是中国大陆的IP;
2、基于java解析生成的china_ip.txt,这样的话相比解析全部IP,解析的成本就低了不少;
3、解析IP列表,存储到Redis,定时N小时过期,保证实时IP库的更新;
4、根据IP到Redis中存储的数据做判断,如果在各个地址段范围内,表示是国内ip,否则是国外ip;
5、判断过的IP也会保存在Redis,避免重复的判断。2.2.1定时更新下载IP库