我想知道 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/