dns - DIG 实用程序如何在 FreeBSD 和 BIND 中工作?

标签 dns bind freebsd named dig

我想知道 DIG(域信息搜索器)命令在代码和实现方面的真正作用。我的意思是,当我们输入 DIG 命令时,FreeBSD 或 BIND 中的代码部分首先命中。

目前,我看到当我点击 DIG 命令时,我看到控件转到一个文件 client.c .在这个文件中,调用了以下函数:

静态无效 client_request(isc_task_t *task, isc_event_t *event);

但是即使在深入研究了 BIND 代码的“命名”部分之后,控件如何到达这个位置对我来说仍然是一个很大的谜。

此外,我看到这个函数是从这个文件中的两个地方调用的。我试图将日志放入这些地方,以了解控制是否通过这些路径到达这个地方,但不幸的是,这并没有发生。似乎“Client_request()”函数以某种方式从外部某个我无法弄清楚的地方被调用。

这里有没有人可以帮我解开这个谜?

谢谢。

最佳答案

不仅用于bind,还用于FreeBSD 内的任何其他命令你可以使用 ktrace ,它非常冗长,但可以帮助您快速了解程序的行为方式。

例如,在最新的 FreeBSD 中你有 drill命令而不是 dig 所以如果你想知道当你运行命令时幕后发生了什么,你可以尝试:

# ktrace drill freebsd.org

然后禁用跟踪:

# ktrace -C

Once tracing is enabled on a process, trace data will be logged until either the process exits or the trace point is cleared. A traced process can generate enormous amounts of log data quickly; It is strongly suggested that users memorize how to disable tracing before attempting to trace a process.

运行ktrace drill freebsd.org 后,应该创建一个文件ktrace.out,您可以使用kdump 读取该文件。 ,例如:

# kdump -f ktrace.out | less

这将有望“揭开谜团”,在您的情况下,只需将 drill 替换为 dig 然后使用类似的东西:

# ktrace dig freebsd.org

关于dns - DIG 实用程序如何在 FreeBSD 和 BIND 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329229/

相关文章:

swift - 将一个 swift 变量绑定(bind)到另一个变量

javascript - 将多个 'id' 绑定(bind)到单击正文标签并根据单击的按钮执行操作?

ruby-on-rails - 在 FreeBsd 中配置 Ruby On Rails 3

python - 如何使用 ansible 和 module portinstall 安装 FreeBSD port?

java - 国际化域名 -> UnknownHostException

model - 您如何与领域专家协商领域模型?

dns - DNS A记录延迟的原因

mysql - 为什么在同一网络中使用动态 dns 进行端口转发时连接失败

binding - 关于Rebol 2和3之间的绑定(bind)行为差异的总结是什么?

c - 在 C 中覆盖 getdirentries