IPアドレスからホスト名を取得する方法
socket.gethostbyaddr()メソッド に IPアドレスを渡すと、ホスト名を含む情報をタプル(Tuple)形式で返します。IPアドレス は IPv6 もサポートしており、文字列で渡します。
import socket
resultTuple = socket.gethostbyaddr(<IPアドレス>)
ホスト名 = resultTuple[0]
代替ホスト名のリスト = resultTuple[1]
IPv4/v6 アドレスのリスト = resultTuple[2]
サンプルコード
次のサンプルコードは Google Public DNS のホスト名を表示します。import socket
# IPv4
host = socket.gethostbyaddr('8.8.8.8')
print(host[0]) # 結果 = 'dns.google'
print(host) # 結果 = ('dns.google', [], ['8.8.8.8'])
# IPv6
host = socket.gethostbyaddr('2001:4860:4860::6464')
print(host[0]) # 結果 = 'dns64.dns.google'
print(host) # 結果 = ('dns64.dns.google', [], ['2001:4860:4860::6464'])
ホスト名が取得できない場合
ホスト名の逆引きに失敗すると、socket.herror エラーが発生します。try - except で socket.herror エラーを捕捉すると、エラーコードとエラーメッセージが取得できます。
サンプルコード
次のサンプルコードは ホスト名の逆引きに失敗したとき、エラーコードとエラーメッセージを表示します。try:
host = socket.gethostbyaddr('192.168.0.1')
print(host)
print(host[0])
except socket.herror as err:
print(err) # 結果 = '[Errno 11004] host not found'
print(err.errno) # 結果 = 11004
print(err.strerror) # 結果 = 'host not found'
except Exception as err:
print('予期せぬエラーが発生しました。')
print(err)
参考資料
検証環境
- Python 3.11.3 (tags/v3.11.3:f3909b8, Apr 4 2023, 23:49:59) [MSC v.1934 64 bit (AMD64)] on win32
- Microsoft Windows 10 Enterprise Version 22H2 OS Build 19045.3693 Experience: Windows Feature Experience Pack 1000.19053.1000.0