如何从 dnspython 中的解析器中按名称删除搜索域?

How to remove a search domain by name from the resolver in dnspython?

我正在使用 dnspython 进行 DNS 查询。由于我的机器加入了我公司的域,因此公司域是我的搜索域的一部分。但是,我 NEVER 希望在对主机名进行正向查找时附加该域。

我采用的一种按值删除不需要的名称服务器的方法如下:

import dns.resolver

my_resolver = dns.resolver.Resolver()
my_resolver.nameservers.remove('172.20.10.1')

不幸的是,我不能对 my_resolver.search 采用相同的方法(或者我不知道如何),因为它的元素是 <class 'dns.name.Name'> 实例而不是字符串。

由于我的公司域似乎是 my_resolver.search 中的最后一个元素,因此我将其删除:del my_resolver.search[-1]。但是我想按值删除它,我该怎么做,最好不要遍历 my_resolver.search.

But I want to remove it by value, how can I do so, preferably without iterating through my_resolver.search

只需从您拥有的字符串创建一个 dns.name.Name

例如:

import dns.name
import dns.resolver

my_resolver = dns.resolver.Resolver()

name_to_remove = 'example.com'
name = dns.name.from_text(name_to_remove)
my_resolver.search.remove(name)

您也可以使用 dns.query.udp() 和其他相关函数来代替 dns.resolver.Resolver.query()。然后,如果您真的需要搜索名称,您可以在 for 循环中手动添加您想要的任何搜索名称,例如。这正是他们在 Resolver class 中的做法(参见 https://github.com/rthalley/dnspython/blob/57d38840f3cb59b838e49fe65caa6062a0904832/dns/resolver.py#L892)。