PythonでグローバルIPアドレスを取得する

最近グローバルIPアドレスを調べることが多くなったのでまとめておくことにする。

DynDNS

dyn.com

DynDNSは、ダイナミックDNSのサービスです。自分のグローバルIPアドレスを知りたい場合はここにアクセスします。返ってくる結果には余分な文字列が含まれるので少しだけ追加の処理を行う必要があります。

>>> import urllib2 as u
>>> url = 'http://checkip.dyndns.com/'
>>> res = u.urlopen(url)
>>> html = res.read()
>>> html
'<html><head><title>Current IP Check</title></head><body>Current IP Address: xxx.xxx.xxx.xxx</body></html>\r\n'
>>> html.split(':')[1].strip().rstrip('</body></html>\r\n')
'xxx.xxx.xxx.xxx'
>>> 

ieServer.Net

www.ieserver.net

ieServer.NetもDynDNSと同様にダイナミックDNSを提供してくれるサービスで、無料で利用することが出来ます。http://ipcheck.ieserver.net/にアクセスすると自分のグローバルIPアドレスを教えてもらえます。

>>> import requests
>>> url = 'http://ipcheck.ieserver.net/'
>>> res = requests.get(url)
>>> res.text
u'xxx.xxx.xxx.xxx\n'
>>> str(res.text.rstrip('\n'))
'xxx.xxx.xxx.xxx'
>>>

IP address information

http://inet-ip.info/

このWebサイトは接続してきたクライアントのIPアドレス、ホスト名や国名などの情報を表示してくれます。URLの末尾にipを付加するとIPアドレスのみが取得でき、jsonを付加するとIPアドレス以外の情報も含めた様々な情報をjson形式で取得できます。

>>> import requests
>>> res = requests.get('http://inet-ip.info/ip')
>>> res.text
u'xxx.xxx.xxx.xxx'
>>>

ifconfig.io

http://ifconfig.io/

こちらもグローバルIPアドレスやその他のネットワーク情報を出力してくれるWebサイトです。ただし、純粋にIPアドレスの文字列のみを返して欲しい場合はUser-Agentにcurlを設定してあげる必要があります。

>>> import requests
>>> headers = {'User-Agent': 'curl'}
>>> res = requests.get('http://ifconfig.io/', headers=headers)
>>> res.text
u'xxx.xxx.xxx.xxx\n'
>>> str(res.text.rstrip('\n'))
'xxx.xxx.xxx.xxx'
>>>

その他

ipify.org

>>> import requests
>>> res = requests.get('http://api.ipify.org/')
>>> res.text
u'xxx.xxx.xxx.xxx'
>>>

ident.me

>>> import requests
>>> res = requests.get('http://ident.me')
>>> res.text
u'xxx.xxx.xxx.xxx'
>>>

icanhazip.com

>>> import requests
>>> res = requests.get('http://icanhazip.com')
>>> res.text
u'xxx.xxx.xxx.xxx\n'
>>>

trackip.net

>>> import requests
>>> res = requests.get('http://www.trackip.net/ip')
>>> res.text
u'xxx.xxx.xxx.xxx'
>>>

dnsomatic.com

>>> import requests
>>> res = requests.get('http://myip.dnsomatic.com')
>>> res.text
u'xxx.xxx.xxx.xxx'
>>>