2020年11月6日 星期五

Get country code from ip

 如何從由IP位址找到國家,網路上有許多網站提供服務,但幾乎都是付費網站,若是免費服務也大都有數量限制..目前搜集到的網站如下

https://api.ip2country.info/ip?<ip>

http://ip-api.com/json/<ip>

https://extreme-ip-lookup.com/json/<ip>

https://ipapi.co/<ip>/json/

https://ip.nf/<ip>.json

https://api.ipdata.co<ip>?api-key=test

https://ipwhois.app/json/<ip>

以上網站都不需要註刪,且提供一定數量免費查詢的付費網站。

另外python module也有許多模組,但大都是付費網站所提供的功能..我選用了geoip2,因為整合到pyton程式較方便。整合方式如下:

1. install geoip2

    pip install geoip2

2. download database

    到https://ftp.openbsd.org/pub/OpenBSD/distfiles/下載最新的dbip-country & dbip-city的mmdb檔案,我下載的檔案為dbip-city-lite-2020-11.mmdb.gz & dbip-country-lite-2020-11.mmdb.gz

3. 將資料庫解壓縮到data目錄

4. python程式如下:

import os,sys

import geoip2.database


ip = sys.argv[1]

rtn = {"countryCode":"", "country":""}

with geoip2.database.Reader('data/dbip-country-lite.mmdb') as reader:

    try:

        response = reader.country(ip)

        rtn['countryCode'] = response.country.iso_code

        rtn['country'] = response.country.name

    except:

        pass

print(rtn)

沒有留言:

張貼留言