6

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

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

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

4

2 回答 2

7

使用 dnspython。

from dns import resolver,reversename
addr=reversename.from_address("2001:4860:4860::8888")
str(resolver.query(addr,"PTR")[0])
于 2012-08-10T11:51:14.513 回答
6

IPy提供了你想要的方法:

>>> from IPy import IP
>>> ip = IP('127.0.0.1')
>>> ip.reverseName()
'1.0.0.127.in-addr.arpa.'

适用于 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')

你需要提供一个主机+端口元组,但你可以提供0端口,你会得到主机名。

于 2012-08-10T17:14:14.260 回答