IPアドレスから位置情報を取得してみたい
IPアドレスは完全に公開された値ですが、このIPアドレスから緯度経度などの位置情報を取得することができます。
これらの情報を取得するためのAPIがいくつか用意されています。
今回はPythonからそれらを利用してみたいと思います。
api.hostip.info
このapiを利用してIPアドレスから緯度経度を含めた諸々の情報を取得できます。
Pythonをではrequestを使い以下のように利用します。
import requests
#適当に指定
ip = "2.2.2.2"
api = "http://api.hostip.info/get_json.php?ip={}&position=true".format(ip)
j_req = requests.get(api).json()
for key, val in j_req.items():
print("{}: {}".format(key,val))
実行結果はこうなります。
緯度経度の他都市名なども取得できました。
city: Prague
ip: 2.2.2.2
lat: 50.0833
country_code: CZ
country_name: CZECH REPUBLIC
lng: 14.4333
MaxMind database
MaxMindはIPアドレスの位置情報を提供している会社です。
MaxMindから彼らのデータベースにアクセスするAPIが提供されているみたいです。
おそらくこれです。
pip install maxminddb-geolite2
Pythonからはこのように利用します。
IPアドレスは適当に指定しています。
from geolite2 import geolite2
geo_r= geolite2.reader()
res = geo_r.get("2.2.2.2")
for key,value in res.items():
print(key)
for key2,value2 in value.items():
if key2 == "names":
for n_key,n_value in value2.items():
print(" - {}: {}".format(n_key,n_value.encode('utf-8')))
else:
print(" - {}: {}".format(key2,value2))
実行するとこうなりました。
country
- geoname_id: 3017382
- iso_code: FR
- is_in_european_union: True
- ru: Франция
- fr: France
- en: France
- de: Frankreich
- zh-CN: 法国
- pt-BR: França
- ja: フランス共和国
- es: Francia
registered_country
- geoname_id: 3017382
- iso_code: FR
- is_in_european_union: True
- ru: Франция
- fr: France
- en: France
- de: Frankreich
- zh-CN: 法国
- pt-BR: França
- ja: フランス共和国
- es: Francia
continent
- geoname_id: 6255148
- code: EU
- ru: Европа
- fr: Europe
- en: Europe
- de: Europa
- zh-CN: 欧洲
- pt-BR: Europa
- ja: ヨーロッパ
- es: Europa
location
- latitude: 48.8582
- accuracy_radius: 500
- time_zone: Europe/Paris
- longitude: 2.3387
api.hostip.infoよりも詳細な情報が取得できました。
Shodan
これについては以前記事を書きましたが、Shodanという検索エンジンを使って位置情報を取得することもできます。
位置情報の他にも脆弱性やOSの種類なども取得できます。
アカウントを作成する必要がありますが、Pythonから利用することが可能です。
import shodan
api = shodan.Shodan("APIKEY")
result = api.host("2.2.2.2")
for key in result.keys():
print("{}: {}".format(key,result[key]))
MaxMindとShodanについては他のプログラミング言語にも提供されているようです。
https://dev.maxmind.com/geoip/geoip2/downloadable/#MaxMind_APIs
https://developer.shodan.io/api/clients