Bind9——如何找到哪些程序正在进行哪些 DNS 查找?

Bind9——如何找到哪些程序正在进行哪些 DNS 查找?

当网络连接中断时,在笔记本电脑上使用bind9会显示大量无意义的域:

Oct 18 19:56:18 lap3 named[1536]: error (network unreachable) resolving './NS/IN': 128.63.2.53#53
Oct 18 19:56:18 lap3 named[1536]: error (network unreachable) resolving 'drgvlofubl/A/IN': 128.63.2.53#53
Oct 18 19:56:18 lap3 named[1536]: error (network unreachable) resolving 'gjpszynvcz/A/IN': 128.63.2.53#53
Oct 18 19:56:19 lap3 named[1536]: error (network unreachable) resolving 'iqgwbuxrbt/A/IN': 192.5.5.241#53

我如何找出哪个程序正在发出这些查询?

将“debug”添加到 /etc/resolv.conf 似乎没有执行任何操作(笔记本电脑正在运行 Arch linux,并且似乎没有通过调试支持进行编译?)。

下一步是在启用调试的情况下编译 libresolv,除非有更好的事情要做。

答案1

考虑到 DNS 工作方式的本质,我认为这是不可能的。 DNS 不知道哪些应用程序正在查询它,只知道服务在主机连接处打开了一个端口(假设是 TCP)或向绑定服务器发送了 UDP 数据包,并且绑定服务器通过此神秘应用程序回复了一个响应相同的连接。

网络嗅探器

在这种情况下,通常您会使用应用程序来嗅探来回传输的网络流量,并且您可以缩小其焦点,以便您只看到与您的情况中的特定协议 (DNS) 相关的消息或在 2 个端点之间流动的流量(您的 PC 和绑定服务器),通常使用 IP 地址。

由于您的问题引起了我的兴趣,我借此机会在 Wireshark SE 网站上提出了这个问题。

摘抄如何确定哪个应用程序正在向我的绑定服务器发送 DNS 查询?

我正在尝试弄清楚如何确定 Linux 机器上的哪个应用程序正在向我的 Bind 服务器发送特定的 DNS 查询。我一直在玩弄以下命令:

$ tshark -i wlan0 -nn -e ip.src -e dns.qry.name -E separator=";" -T fields port 53
192.168.1.20;ajax.googleapis.com
192.168.1.101;ajax.googleapis.com
192.168.1.20;pop.bizmail.yahoo.com

我怎样才能让它向我显示实际的应用程序(端口和可能的 PID)? Wireshark就是您用来执行此操作的此类工具,当然还有其他工具。

我收到了这个答案:

对于普通的数据包捕获,无法从数据包中识别应用程序或 PID,因为您只能看到数据包是从哪个端口发送的。

如果您在正在进行通信的主机上捕获,您可以尝试使用磨练项目以获得此类信息。在 Windows 上,网络监控器可以做同样的事情。

否则,您可以尝试在执行名称解析的盒子上使用 netstat 并将其与 DNS 查询使用的端口号进行匹配,但由于它是 UDP 通信,端口几乎立即打开和关闭 - 因此有机会执行 netstat在开放的那一毫秒内,就像试图赢得彩票一样。

磨练项目

这种方法看起来是一个非常有前途的线索。这是我遇到的第一个项目,它似乎在网络数据包和进程 ID 之间创建链接。

Hone 是一种独特的工具,用于将数据包与进程关联起来,以弥合主机与网络之间的鸿沟。

参考

答案2

如果你有可能怀疑程序,跟踪它recvfromsendto系统调用。例如,我对 radheengineering.info 进行了数千次查找,尽管 exim4 的日志中没有显示该名称,但它是最有可能的罪魁祸首,其主要 pid 为 1813。

因此,使用strace -f -p1813 -erecvfrom,sendto,我发现确实是 exim4 进行了查询。然后我屏蔽了连接到服务器的 /24 网络,问题就解决了。

相关内容