Python:如何使用特定的 DNS 服务器查找带有 IP 的主机名?

Posted

技术标签:

【中文标题】Python:如何使用特定的 DNS 服务器查找带有 IP 的主机名?【英文标题】:Python: How to find HostName with IP using specific DNS server? 【发布时间】:2021-12-16 05:41:50 【问题描述】:

上下文:

我有 50000+ ip 来自防火墙策略的内部网络计算机地址。 我正在尝试获取所有这些的主机名使用一个特定的DNS服务器

问题是:

我不想使用公司的主 DNS 服务器以避免崩溃和关闭生产。所以我想指定使用哪一个。

我尝试过的:

我已经尝试过 dns.resolver、socket.gethostbyaddr 等等,但它似乎不起作用...

提前致谢!

【问题讨论】:

1) 无法保证您拥有将 IP 地址映射回主机名的 PTR 记录。 2)如果您的 DNS 服务器因 50000 个请求而崩溃,这是一个问题,尝试解决此问题可能会更快 3)“我尝试过......但它似乎不起作用”。您将需要显示更多代码来证明您正在尝试什么。 Pythondns 模块完全可以满足你的需求。 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

我们可以调用nslookup作为子进程,然后使用该函数指定要查询的DNS服务器。如果没有指定,您可以将 dns='YourDefaultDNSServer' 放在函数变量中以默认使用 DNS 服务器。

    def reverseLookupDNS(ip, dns='X.X.X.X'):
       a=subprocess.run(['nslookup',ip,dns],capture_output=True, text=True, 
       shell=True)
       if a.stderr:
           return None
       else:
           sortie=a.stdout
           reponse=str(sortie).split(':')
           host = reponse[3].strip(' ').split('\n')[0]
           return host

然后

    reverseLookupDNS('192.168.1.10')

使用函数参数中指定的默认服务器

    reverseLookupDNS('192.168.1.10', "aDNSServer")

【讨论】:

以上是关于Python:如何使用特定的 DNS 服务器查找带有 IP 的主机名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 网络服务器中禁用反向 dns 查找?

Python“请求”库 - 定义特定的 DNS?

如何在 Python 中进行 DNS 查找,包括引用 /etc/hosts?

如何使用 DnsQuery 指定要查询的特定 DNS 服务器?

使用Bind搭建DNS服务

使用Bind搭建DNS服务