0

使用该dnspython库,我有这个简单的代码,给定 DNS IP,我可以查询一个域名。我需要获取 DNS 服务器的区域名称。例如,如果不是8.8.8.8我有一个192.168.4.5名为区域的私有 IP,com而有问题的服务器是a.com.

com作为查询我的区域的 DNS IP 的结果,如何获得?

import dns.resolver

resolver = dns.resolver.Resolver()
resolver.nameservers = ['8.8.8.8']

def myQuery(domain, records):
    for r in records:
        try:
            response = resolver.query(domain, r)
            for rData in response:
                    domainIP = str(rData)
                    print(domainIP)
                    break # we only need one IP
        except Exception as e:
            print(e)

myQuery("google.com","A")
4

1 回答 1

2

听起来您正在执行反向 IP 查找。

你有IP,但你想要名字。如果是这样,您正在寻找 PTR 类型记录 ( https://en.wikipedia.org/wiki/Reverse_DNS_lookup )。PTR 记录如下所示:

5.4.168.192.in-addr.arpa。

您不必知道这一点,因为有一个名为 reversername 的 dns-python 辅助函数,它将为您从 IP 地址生成这些名称。下面是 8.8.8.8 的反向 IP 查找示例:

>>> from dns import reversename, resolver
>>> 
>>> rev_name = reversename.from_address('8.8.8.8')
>>> reversed_dns = str(resolver.query(rev_name,"PTR")[0])
>>> print reversed_dns
google-public-dns-a.google.com.

为了让它在您的私人服务器上工作,您需要确保您或您的系统在向 DNS 注册您的机器时正在添加/创建 PTR 记录。假设您的 DNS 中有 PTR 记录,那么这应该适合您:

from dns import reversename, resolver
rev_name = reversename.from_address('192.168.4.5')
reversed_dns = str(resolver.query(rev_name,"PTR")[0])
print(reversed_dns)
于 2018-06-02T05:19:05.590 回答