我想知道当涉及到代码和实现时,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

在进程上启用跟踪后,将记录跟踪数据,直到
进程退出或清除跟踪点。追踪过程
可以快速生成大量日志数据;强烈
建议用户在尝试执行以下操作之前先记住如何禁用跟踪
跟踪过程。

运行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/

10-10 14:59