如何快速判斷一個 IP 是否屬於中國大陸?

不一定要求很准,不是萬不得已不要使用地址資料庫。


如果要做的特別講究的話

首先你需要從官方獲取一份分配給中國的IP數據,Apanic提供了每日更新的亞太地區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
", $4, 32-log($5)/log(2)) }" &>china_ip.txt

我正在寫後續


用python調用網站的介面。

api_url = "http://www.ip.cn/%s" % ip

獲得返回的網頁

text = driver.find_element_by_xpath("//div[@id="result"]").text

在把結果解析出來就可以了


@ade34 提到的方法可行。

這裡有份python實現: http://xixitalk.github.io/blog/2013/03/11/func-is-china-ip/

這裡有份java實現: 如何判斷是否為中國IP | 天涯島


像上面的朋友說的,你可以調用網站介面,然後用正則匹配到地區即可!

比如:

http://www.ip138.com/ips138.asp?ip=196.24.149.98action=2

把其中的196.24.149.98換成你的ip然後訪問獲得結果,即可!


推薦閱讀:

localhost是不經過網卡傳輸的,而127.0.0.1則要通過網卡傳輸的,這種說法正確嗎?
如何看待高精度IP數據?
在公司的無線區域網必須手動設置IP地址和DNS地址,而回家後的無線區域網自動分配以上地址才可以上網?
BT和PT有什麼區別?
請問從哪裡可以下載所有域名與IP相對應的DNS表?

TAG:互聯網 | IP地址 | TCPIP |