Dns 如何在FreeBSD和BIND中使用DIG实用程序?

Dns 如何在FreeBSD和BIND中使用DIG实用程序?,dns,bind,freebsd,named,dig,Dns,Bind,Freebsd,Named,Dig,我想知道DIG(domaininformationgroper)命令在代码和实现方面是如何工作的。我的意思是,当我们输入DIG命令时,FreeBSD或BIND中的哪部分代码首先命中 目前,我看到当我点击DIG命令时,我看到控件进入一个文件。在此文件中,调用以下函数: 静态空隙 客户端请求(isc_任务任务、isc_事件、事件) 但是,即使在深入研究了绑定代码的“命名”部分之后,控件如何到达这个位置对我来说仍然是一个很大的谜 此外,我看到这个函数是从这个文件中的两个地方调用的。我试图将日志放入这些

我想知道DIG(domaininformationgroper)命令在代码和实现方面是如何工作的。我的意思是,当我们输入DIG命令时,FreeBSD或BIND中的哪部分代码首先命中

目前,我看到当我点击DIG命令时,我看到控件进入一个文件。在此文件中,调用以下函数:

静态空隙 客户端请求(isc_任务任务、isc_事件、事件)

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

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

这里有人能帮我解开这个谜吗


谢谢。

感谢FreeBSD端口系统,您可以在启用调试的情况下编译自己的绑定。要这样做,请运行

cd /usr/ports/dns/bind913/ && make install clean WITH_DEBUG=1

然后您可以在调试器中运行它(
lldb/usr/local/bin/dig
),打断您感兴趣的行,然后查看backtrace以了解控件是如何到达那里的。

不仅适用于
bind
,而且适用于您可以使用的任何其他命令,它非常冗长,但可以帮助您快速了解程序的运行情况

例如,在最新的FreeBSD中,您使用的是命令而不是
dig
,因此,如果您想知道在运行命令时幕后发生了什么,可以尝试:

# ktrace drill freebsd.org
然后要禁用跟踪,请执行以下操作:

# ktrace -C
在流程上启用跟踪后,将记录跟踪数据,直到 进程退出或清除跟踪点。跟踪过程 能够快速生成海量的日志数据;这是强烈的 建议用户在尝试执行跟踪之前记住如何禁用跟踪 跟踪一个过程

运行
ktrace drill freebsd.org
后,应创建一个文件
ktrace.out
供您阅读,例如:

# kdump -f ktrace.out | less
这将有望“揭开谜团”,在您的情况下,只需将
drill
替换为
dig
,然后使用以下方法:

# ktrace dig freebsd.org

你是问/问/问还是指名?(dig只是通过网络向指定的服务器发送一个DNS请求)@nos我想知道在我发出“dig”命令时,控制权在指定的服务器中的确切位置。正如我已经解释过的,目前我在client.c文件中看到了从“client_request()”函数开始的控件。但它究竟是如何到达那里的,从哪里来的,我无法理解。你的问题非常模糊。您提供的URL与
dig
、命令行(命名和dig是两个不同的东西)没有关系。相反,在任何C程序中,操作系统都会首先调用
main
函数,然后无论发生什么都会指示程序流程。请参阅上一链接中的第1820行和更高版本。您也可以使用绑定工具端口进行挖掘