Как работает утилита DIG во FreeBSD и BIND? - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу знать, как на самом деле работает команда DIG (Domain Information Groper), когда дело доходит до кода и реализации. Я имею в виду, когда мы вводим команду DIG, какая часть кода во FreeBSD или BIND попадает первой.

В настоящее время я вижу, что при нажатии на команду DIG элемент управления переходит в файл client.c . Внутри этого файла вызывается следующая функция:

статическая пустота client_request (isc_task_t * task, isc_event_t * event);

Но как контроль доходит до этого места, для меня все еще остается большой загадкой, даже после того, как я покопался в «именованной» части кода BIND.

Кроме того, я вижу, что эта функция вызывается из двух мест в этом файле. Я пытался поместить журналы в такие места, чтобы узнать, достигает ли контроль этих мест через эти пути, но, к сожалению, этого не происходит. Кажется, функция Client_request () каким-то образом вызывается извне, что я не могу понять.

Есть здесь кто-нибудь, кто может помочь мне разгадать эту тайну для меня?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Не только для bind, но и для любой другой команды, в FreeBSD вы можете использовать ktrace , это очень многословно, но может помочь вам получить краткий обзор того, какПрограмма ведет себя.

Например, в последних версиях FreeBSD вместо dig вы используете команду drill, так что если вы хотите знать, что происходит за кулисами, когда вы запускаете командуВы можете попробовать:

# ktrace drill freebsd.org

Затем, чтобы отключить трассировку:

# ktrace -C

После включения трассировки в процессе данные трассировки будут регистрироваться до тех пор, покапроцесс завершается или точка трассировки очищается.Отслеживаемый процесс может быстро генерировать огромное количество данных журнала;Настоятельно рекомендуется, чтобы пользователи запомнили, как отключить трассировку, прежде чем пытаться отслеживать процесс.

После запуска ktrace drill freebsd.org должен быть создан файл ktrace.out, который можно прочитать с помощью kdump, например:

# kdump -f ktrace.out | less

Надеемся, что это «откроет тайну», в вашем случае просто замените drill на dig, а затем используйте что-то вроде:

# ktrace dig freebsd.org
0 голосов
/ 14 сентября 2018

Благодаря системе портов FreeBSD вы можете скомпилировать свой собственный BIND с включенной отладкой. Для этого запустите

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

Затем вы можете запустить его в отладчике (lldb /usr/local/bin/dig), разбить интересующую вас строку, а затем посмотреть на трассировку, чтобы выяснить, как управление достигло там.

...