在Python中反向DNS查找

Ror*_*ory 3 python ipv6

如果我有一个像2001:4860:4860 :: 8888的IP地址

如何以foo.ip6.arpa格式获取完全限定的域?

编辑:到目前为止,这两个解决方案都给我google-public-dns-a.google.com - 可能反向DNS是错误的名称.为此,我希望输出类似于8.8.8.8.0 ... etc.ip6.arpa

Vin*_*agi 6

使用dnspython.

from dns import resolver,reversename
addr=reversename.from_address("2001:4860:4860::8888")
str(resolver.query(addr,"PTR")[0])
Run Code Online (Sandbox Code Playgroud)


San*_*ann 6

IPy提供了你想要的方法:

>>> from IPy import IP
>>> ip = IP('127.0.0.1')
>>> ip.reverseName()
'1.0.0.127.in-addr.arpa.'
Run Code Online (Sandbox Code Playgroud)

适用于 IPv4 和 IPv6,尽管原始 IPy 对 IPv6 有一些错误。我在https://github.com/steffann/python-ipy创建了一个带有一些扩展和修复的 fork,只要修复尚未合并回原始代码,您就可以使用它。

更新:

您当然也可以使用内置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')
Run Code Online (Sandbox Code Playgroud)

您需要提供一个主机+端口元组,但您可以提供0端口,并且您将获得主机名。