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