如何在Linux上用python绕过nsswitch.conf进行DNS查询且不需额外包

1 投票
4 回答
1364 浏览
提问于 2025-04-16 15:11

我想要进行DNS查询,以检查一下/etc/hosts文件中的某些条目是否过时(现在有用的DNS)或者与DNS的回答冲突。nsswitch.conf文件被设置为优先查找/etc/hosts。

gethostbyname()或getaddrinfo()这两个函数都不适用,因为它们会使用操作系统的机制(nsswitch.conf)。

我知道有一个叫pythonDNS的包,但不幸的是,在这些系统上安装额外的包比较困难。而且可用的Python版本也比较旧(python23)。

到目前为止,我看到的唯一可能的解决方案是解析nslookup或dig的输出。但我真的不喜欢这个主意,因为这涉及到很多复杂的内容(比如CNAME记录、多个记录等等)。

我在寻找一个简单的类或函数来进行DNS A记录的查找。

4 个回答

0

我一直喜欢evdns这个东西。

http://linux.die.net/man/3/evdns

似乎有一个叫做pyevent的Python绑定。

http://code.google.com/p/pyevent/source/browse/trunk/evdns.pxi?r=44

1

Twisted Names 里有一个 DNS 客户端。

1

明显的选择有:

  • PyDNS - 这是一个用于处理DNS的Python库。
  • dnspython - 另一个功能强大的Python库,专门用来处理DNS相关的任务。
  • 通过libresolv C API调用res_query(例如,可以使用ctypes来实现) - 这是一种更底层的方法,可以直接调用C语言的功能。

撰写回答