Команда dig позволяет использовать одноименную утилиту для отправки запросов серверам доменных имен. Данная утилита входит в состав сервера доменных имен BIND, который включен в стандартный комплект поставки большинства дистрибутивов. При использовании dig пользователь может указать имя сервера доменных имен, который должен обработать запрос, поэтому рассматриваемая утилита используется главным образом для диагностики серверов доменных имен.
Базовый синтаксис команды выглядит следующим образом:
$ dig [@имя-сервера-доменных-имен] [параметры] имя-домена-или-IP-адрес
Утилита поддерживает ряд параметров командной строки. Наиболее полезным параметром является параметр -t, позволяющий указать интересующий пользователя тип ресурсной записи (вместо этого параметра может использоваться указание типа ресурсной записи). В частности, поддерживаются следующие типы ресурсных записей:
По умолчанию утилита осуществляет запросы значений ресурсных записей типа A. При этом существует абстрактный тип ресурсных записей ANY, позволяющий вывести значения всех доступных ресурсных записей. Параметр -x позволяет осуществить обратное разрешение доменного имени. В случае необходимости получения информации о множестве доменных имен следует использовать параметр -f с путем к файлу, содержащему список этих имен (по одному имени в строке).
Вывод утилиты разделен на ряд секций:
Пользователь может скрыть комментарии (заголовок, область статистики и названия секций) с помощью параметра +nocomments, секцию AUTHORITY SECTION с помощью параметра +noauthority, секцию ADDITIONAL SECTION с помощью параметра +noadditional, область статистики с помощью параметра +nostats и секцию ANSWER SECTION с помощью параметра +noanswer (хотя это и не совсем разумно). Существуют и обратные параметры без префикса no, которые могут использоваться для показа отдельных секций (например, для показа лишь секции ANSWER SECTION достаточно использовать комбинацию параметров +noall и +answer). Все параметры, которые должны использоваться утилитой по умолчанию, могут быть помещены в скрытый файл конфигурации .digrc в домашней директории пользователя.
Для получения IP-адреса сервера ресурса по имени его домена достаточно передать утилите имя домена без каких-либо параметров:
$ dig linux-faq.ru
В результате будет получен следующий вывод, содержащий достаточное количество ненужной информации:
; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> linux-faq.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46630
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;linux-faq.ru. IN A
;; ANSWER SECTION:
linux-faq.ru. 834 IN A 54.172.136.192
;; Query time: 0 msec
;; SERVER: 192.168.188.253#53(192.168.188.253)
;; WHEN: Пн июл 24 02:04:41 MSK 2017
;; MSG SIZE rcvd: 57
Несложно заметить, что сервер имеет IP-адрес 54.172.136.192. Для получения более компактного вывода может использоваться следующая команда:
$ dig +noall +answer linux-faq.ru
Теперь вывод будет содержать лишь наиболее важную информацию:
linux-faq.ru. 700 IN A 54.172.136.192
Для получения имен доменов почтовых серверов, связанных с заданным доменом, нужно четко указывать тип ресурсной записи MX. Для этого может использоваться параметр -t:
$ dig -t MX linux-faq.ru +noall +answer
Также параметр -t может просто пропускаться:
$ dig MX linux-faq.ru +noall +answer
В обоих случаях будет получен аналогичный вывод:
; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> MX linux-faq.ru +noall +answer
;; global options: +cmd
linux-faq.ru. 9728 IN MX 10 emx.mail.ru.
Для получения имен серверов доменных имен, связанных с заданным доменом, нужно четко указывать тип ресурсной записи NS. Для этого может использоваться параметр -t:
$ dig -t NS linux-faq.ru +noall +answer
Также параметр -t может просто пропускаться:
$ dig NS linux-faq.ru +noall +answer
В обоих случаях будет получен аналогичный вывод:
; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> NS linux-faq.ru +noall +answer
;; global options: +cmd
linux-faq.ru. 301 IN NS ns2.r01.ru.
linux-faq.ru. 301 IN NS ns1.r01.ru.
Для получения значений всех доступных ресурсных записей, связанных с заданным доменом, нужно использовать тип ресурсной записи ANY. Для этого может использоваться параметр -t:
$ dig -t ANY linux-faq.ru +noall +answer
Также параметр -t может просто пропускаться:
$ dig ANY linux-faq.ru +noall +answer
В обоих случаях будет получен аналогичный вывод:
; <<>> DiG 9.11.1-P2-RedHat-9.11.1-2.P2.fc26 <<>> ANY linux-faq.ru +noall +answer
;; global options: +cmd
linux-faq.ru. 9431 IN MX 10 emx.mail.ru.
linux-faq.ru. 163 IN A 54.172.136.192
linux-faq.ru. 163 IN NS ns2.r01.ru.
linux-faq.ru. 163 IN NS ns1.r01.ru.
Для того, чтобы осуществить обратное разрешение доменного имени достаточно использовать параметр -x и задать IP-адрес сервера:
$ dig -x 54.172.136.192
Для использования определенного сервера доменных имен необходимо указать его имя или IP-адрес после символа @:
$ dig @ns1.r01.ru linux-faq.ru