在dnspython中,给定DNS IP,如何获取DNS区域名称

时间:2018-06-02 04:46:59

标签: python sockets dns network-programming dnspython

使用dnspython库,我有这个简单的代码,给定DNS IP,我可以查询域名。我需要获取DNS服务器的区域名称。例如,如果代替8.8.8.8我为名为192.168.4.5的区域设置了私有IP com,并且相关服务器为a.com

如何查询我所在区域的DNS IP,我如何获得com

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")

1 个答案:

答案 0 :(得分:1)

听起来你正在进行反向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)