受欢迎的博客标签

如何快速判断一个 IP 是否属于中国?

Published

1.公司网站的需求

按来访人的IP来判断他是进中文网站还是英文网站。根据是中国的ip就进入中文页面,国外的就进入英文页面。

2.方案

2.1.通过ip地址数据库判断(速度慢,但准确)

2.2. 通过浏览器语言判断(绕过了ip判断,速度快,但不准确)

2.3 调用ip网站的接口判断,把结果解析出来

2.4 通过客户端操作系统的类型来判断

3.具体过程

3.1 使用地址数据库

step 1:

首先你需要从官方获取一份分配给中国的IP数据,Apnic提供了每日更新的亚太地区IPv4,IPv6,AS号分配的信息表,访问url是

http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest

该文件的格式与具体内容参加
ftp://ftp.apnic.net/pub/apnic/stats/apnic/README.TXT
这个组织是APNIC(Asia Pacific Network Information Center),就是IANA下面管亚洲的所谓的官方。

有了这个连接是不停更新的。所以你可以自己维护一个逻辑,定时刷新自己的数据库,然后拿IP去比较。一共有十几万条表象,最简单的就是内存中做个Map,最好是RangeMap,这样就能快速的进行查询了。

curl 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | grep ipv4 | grep CN | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' >china_ip.txt

other

Detect Online Fraud and Locate Online Visitors

https://www.maxmind.com/

 

 

 

3.2 通过浏览器语言判断(绕过了ip判断,速度快,但不准确)

 

 Javascript判断来访者的浏览器语言,如果是中文系统,自然使用者都是中国人,跳中文网站;
如果是非中文系统,默认使用者非中国人,跳英文网站。
优点:判断反映速度快。

缺点:不准确,有可能中国用户喜欢用英文版系统,或者外国人使用中文系统的情况。

var Browser_Agent = navigator.userAgent;
    // 浏览器为ie的情况 
    if (Browser_Agent.indexOf( " MSIE " ) !=- 1 ){
        var a = navigator.browserLanguage;
        if (a != " zh-cn " ){
            // 跳转到英文网站
            location.href = " 英文网站 " ;
        }
    }
    // 浏览器非ie的情况 
    else {
        var b = navigator.language;
        if (b != " zh-CN " ){
            // 跳转到英文网站
            location.href = " 英文网站 " ;
        }
    }

3.3 调用ip网站的接口

python

用python调用网站的接口。
api_url = 'http://www.ip.cn/%s' % ip
http:///www.ip138.com/ips138.asp%3Fip%3D196.24.149.98%26action%3D2
获得返回的网页
text = driver.find_element_by_xpath('//div[@id="result"]').text
把结果解析出来就可以了

3.4  通过客户端操作系统的类型来判断

用javascript识别操作系统语言来切换网页语言更简单

<script   language=javascript>   
  alert(navigator.systemLanguage);   
</script>