首页 文章

DIG实用程序如何在FreeBSD和BIND中运行?

提问于
浏览
3

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

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

static void client_request(isc_task_t * task,isc_event_t * event);

但是,即使在对BIND代码的“命名”部分进行了大量挖掘后,控制如何到达这个地方仍然是一个很大的谜团 .

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

这里有谁能帮我解决这个谜团给我?

谢谢 .

2 回答

  • 1

    感谢FreeBSD Ports系统,您可以在启用调试的情况下编译自己的BIND . 这样做跑

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

    然后你可以在调试器( lldb /usr/local/bin/dig )中运行它,打破你感兴趣的行,然后查看backtrace以找出控件是如何到达那里的 .

  • 1

    不仅对于 bind 而且对于任何其他命令,在FreeBSD中你可以使用ktrace,它非常冗长,但可以帮助你快速了解程序的行为方式 .

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

    # ktrace drill freebsd.org
    

    然后禁用跟踪:

    # ktrace -C
    

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

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

    # kdump -f ktrace.out | less
    

    希望"reveal the mystery",在你的情况下,只需用 dig 替换 drill 然后使用类似的东西:

    # ktrace dig freebsd.org
    

相关问题