Python - IPアドレスからホスト名を取得する

IPアドレスからホスト名を取得するには、socket.gethostbyaddr() を使用します。

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)

参考資料

検証環境