如果我有一个IP地址,例如2001:4860:4860::8888
如何以foo.ip6.arpa的格式获取完全限定域名?
编辑:到目前为止,两种解决方案都给了我google-public-dns-a.google.com - 也许反向DNS是错误的名称。对此,我希望输出类似于8.8.8.8.0...etc.ip6.arpa的内容。
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 上进行了一些扩展和修复,只要这些修复没有合并回原始代码,您就可以使用它。
当然,您也可以使用内置的socket
模块中的getnameinfo函数:
>>> 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
,这样你将得到主机名。
socket.getnameinfo
并不是真正的反向 DNS 解析(这意味着仅/准确地询问 DNS)。使用 socket.getnameinfo
还可能考虑其他源,例如 /etc/hosts
(通常甚至在查询 DNS 之前)并且甚至可能完全不会去查询 DNS。 - calestyo使用 dnspython 库。
from dns import resolver,reversename
addr=reversename.from_address("2001:4860:4860::8888")
str(resolver.query(addr,"PTR")[0])
.ip6.arpa
格式吗? - Pavel Šimerda