2001:4860:4860::8888 のような IP アドレスがある場合
foo.ip6.arpa の形式で完全修飾ドメインを取得するにはどうすればよいですか?
編集:これまでの両方のソリューションで google-public-dns-a.google.com が得られました-おそらく逆引き DNS が間違った名前でした。このため、出力は 8.8.8.8.0...etc.ip6.arpa のようなものになると思います
dnspython を使用します。
from dns import resolver,reversename
addr=reversename.from_address("2001:4860:4860::8888")
str(resolver.query(addr,"PTR")[0])
IPyは、必要な方法を提供します。
>>> from IPy import IP
>>> ip = IP('127.0.0.1')
>>> ip.reverseName()
'1.0.0.127.in-addr.arpa.'
元のIPyにはIPv6に関するいくつかのバグがありますが、IPv4とIPv6の両方で機能します。https://github.com/steffann/python-ipyでいくつかの拡張機能と修正を含むフォークを作成しました。修正が元のコードにマージされていない限り、これを使用できます。
もちろん、組み込みsocket
モジュールを使用することもできます。
>>> import socket
>>> socket.getnameinfo(('2001:4860:4860::8888', 0), 0)
('google-public-dns-a.google.com', '0')
>>> socket.getnameinfo(('127.0.0.1', 0), 0)
('localhost', '0')
ホストとポートのタプルを指定する必要がありますが、0
ポートを指定すると、ホスト名が返されます。