четверг, 14 июля 2016 г.

10 примеров использования команды dig

Итак, что такое dig?

dig (англ. слово «копать», а формально — сокращение от «domain information groper») — утилита (DNS-клиент), предоставляющая пользователю интерфейс командной строки для обращения к системе DNS. Позволяет задавать различные типы запросов и запрашивать произвольно указываемые сервера. Является аналогом утилиты nslookup.

Утилита dig входит в стандартный комплект DNS сервера BIND.

Начнем,

1. Простой вывод команды dig (для понимания вывода, без доп.параметров )

Когда вы задаете имя домена в команде dig по-умолчанию вы получаете A-запись домена (ip-адрес сайта (домена) который мы запрашивали) как показано на листинге ниже

$dig ya.ru

; <<>> DiG 9.7.3 <<>> ya.ru
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31244
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;ya.ru.                         IN      A

;; ANSWER SECTION:
ya.ru.                  2187    IN      A       87.250.251.3
ya.ru.                  2187    IN      A       77.88.21.3
ya.ru.                  2187    IN      A       213.180.204.3
ya.ru.                  2187    IN      A       93.158.134.3
ya.ru.                  2187    IN      A       213.180.193.3
ya.ru.                  2187    IN      A       87.250.250.203
ya.ru.                  2187    IN      A       93.158.134.203
ya.ru.                  2187    IN      A       87.250.250.3

;; Query time: 2 msec
;; SERVER: 10.218.138.252#53(10.218.138.252)
;; WHEN: Fri Mar 23 15:21:18 2012
;; MSG SIZE  rcvd: 151


В примере можно увидеть A-записи домена ya.ru в разделе ANSWER SECTION

Давайте рассмотрим разделы данного вывода подробней:
- HEADER (заголовок): показывает версию dig, глобальные опции используемые с командой и другую дополнительную информацию
- QUESTION SECTION (секция запроса): Показывает наш запрос, то бишь мы запросили показать A-запись (команда dig без параметров) для домена ya.ru
- ANSWER SECTION (секция ответа): Показывает ответ полученный от DNS, в нашем случае показывает A-запись для ya.ru
Последняя секция это статистика по запросу (служебная информация) - время выполнения запроса, имя DNS-сервера который запрашивался, когда был создан запрос и размер сообщения

Так же можно выполнить опрос конкретного DNS-сервера:

$dig @ns1.yandex.ru ya.ru

; <<>> DiG 9.7.3 <<>> @ns1.yandex.ru ya.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56730
;; flags: qr aa rd; QUERY: 1, ANSWER: 8, AUTHORITY: 2, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;ya.ru.                         IN      A

;; ANSWER SECTION:
ya.ru.                  7200    IN      A       77.88.21.3
ya.ru.                  7200    IN      A       87.250.250.3
ya.ru.                  7200    IN      A       87.250.250.203
ya.ru.                  7200    IN      A       87.250.251.3
ya.ru.                  7200    IN      A       93.158.134.3
ya.ru.                  7200    IN      A       93.158.134.203
ya.ru.                  7200    IN      A       213.180.193.3
ya.ru.                  7200    IN      A       213.180.204.3

;; AUTHORITY SECTION:
ya.ru.                  7200    IN      NS      ns1.yandex.ru.
ya.ru.                  7200    IN      NS      ns5.yandex.ru.

;; ADDITIONAL SECTION:
ns1.yandex.ru.          345600  IN      A       213.180.193.1
ns1.yandex.ru.          3600    IN      AAAA    2a02:6b8::1
ns5.yandex.ru.          345600  IN      A       213.180.204.1

;; Query time: 13 msec
;; SERVER: 213.180.193.1#53(213.180.193.1)
;; WHEN: Fri Mar 23 14:41:37 2012
;; MSG SIZE  rcvd: 254

Результат вывода дополняется еще двумя секциями:
AUTHORITY SECTION: Показывает имена DNS-серверов обработавших наш запрос
ADDITIONAL SECTION: Показывает ip-адреса этих DNS-серверов (из секции AUTHORITY SECTION)

2. Вывод только секции ANSWER SECTION

В большинстве случаев требуется только ip адрес домена, то бишь вывод секции "ANSWER SECTION"
Для этого существуют следующие ключи:
-+nocomments - отключает линию комментариев
-+noauthority - отключает секцию "AUTHORITY SECTION"
-+noadditional – отключает секцию "ADDITIONAL SECTION"
-+nostats – отключает секцию статистики
-+noanswer – выключает секцию ответа (ANSWER SECTION)

Пример:

$ dig ya.ru +nocomments +noquestion +noauthority +noadditional +nostats

; <<>> DiG 9.7.3 <<>> ya.ru +nocomments +noquestion +noauthority +noadditional +nostats
;; global options: +cmd
ya.ru.                  114     IN      A       77.88.21.3
ya.ru.                  114     IN      A       213.180.204.3
ya.ru.                  114     IN      A       93.158.134.3
ya.ru.                  114     IN      A       213.180.193.3
ya.ru.                  114     IN      A       87.250.250.203
ya.ru.                  114     IN      A       93.158.134.203
ya.ru.                  114     IN      A       87.250.250.3
ya.ru.                  114     IN      A       87.250.251.3

Можно сделать проще, существует ключ +noall, который выключает все секции. Таким образом мы используем ключ +noall и добавляем ключ +answer, уменьшая длину команды

$ dig ya.ru +noall +answer

; <<>> DiG 9.7.3 <<>> ya.ru +noall +answer
;; global options: +cmd
ya.ru.                  7152    IN      A       213.180.193.3
ya.ru.                  7152    IN      A       87.250.250.203
ya.ru.                  7152    IN      A       93.158.134.3
ya.ru.                  7152    IN      A       87.250.250.3
ya.ru.                  7152    IN      A       77.88.21.3
ya.ru.                  7152    IN      A       213.180.204.3
ya.ru.                  7152    IN      A       87.250.251.3
ya.ru.                  7152    IN      A       93.158.134.203

3. Запрос MX-записи

Для запроса MX-записи домена мы используем одноименный аргумент командной строки (MX)


$ dig ya.ru  MX +noall +answer

; <<>> DiG 9.7.3 <<>> ya.ru MX +noall +answer
;; global options: +cmd
ya.ru.                  1979    IN      MX      10 mx.yandex.ru.

Этот же запрос можно выполнить с ключом -t (тип)

$ dig -t MX ya.ru +noall +answer

; <<>> DiG 9.7.3 <<>> -t MX ya.ru +noall +answer
;; global options: +cmd
ya.ru.                  1903    IN      MX      10 mx.yandex.ru.

4. Запрос NS-записи

По аналогии с предыдущим пунктом, используем аргумент NS


$ dig ya.ru NS +noall +answer

; <<>> DiG 9.7.3 <<>> ya.ru NS +noall +answer
;; global options: +cmd
ya.ru.                  7170    IN      NS      ns5.yandex.ru.
ya.ru.                  7170    IN      NS      ns1.yandex.ru.

Вы также можете использовать ключ -t для указания типа запроса

$ dig -t NS ya.ru +noall +answer

; <<>> DiG 9.7.3 <<>> -t NS ya.ru +noall +answer
;; global options: +cmd
ya.ru.                  7088    IN      NS      ns5.yandex.ru.
ya.ru.                  7088    IN      NS      ns1.yandex.ru.


5. Просмотр всех типов DNS-записей

Для этого используется ключ ANY

$ dig ya.ru ANY +noall +answer

; <<>> DiG 9.7.3 <<>> ya.ru ANY +noall +answer
;; global options: +cmd
ya.ru.                  4931    IN      TXT     "v=spf1 redirect=_spf.yandex.ru"
ya.ru.                  6963    IN      NS      ns1.yandex.ru.
ya.ru.                  6963    IN      NS      ns5.yandex.ru.
ya.ru.                  1533    IN      MX      10 mx.yandex.ru.
ya.ru.                  6494    IN      A       93.158.134.203
ya.ru.                  6494    IN      A       213.180.193.3
ya.ru.                  6494    IN      A       87.250.250.203
ya.ru.                  6494    IN      A       93.158.134.3
ya.ru.                  6494    IN      A       87.250.250.3
ya.ru.                  6494    IN      A       77.88.21.3
ya.ru.                  6494    IN      A       213.180.204.3
ya.ru.                  6494    IN      A       87.250.251.3

Также допустим ключ -t

$ dig -t ANY ya.ru  +noall +answer

; <<>> DiG 9.7.3 <<>> -t ANY ya.ru +noall +answer
;; global options: +cmd
ya.ru.                  4857    IN      TXT     "v=spf1 redirect=_spf.yandex.ru"
ya.ru.                  6889    IN      NS      ns5.yandex.ru.
ya.ru.                  6889    IN      NS      ns1.yandex.ru.
ya.ru.                  1459    IN      MX      10 mx.yandex.ru.
ya.ru.                  6420    IN      A       213.180.204.3
ya.ru.                  6420    IN      A       87.250.251.3
ya.ru.                  6420    IN      A       93.158.134.203
ya.ru.                  6420    IN      A       213.180.193.3
ya.ru.                  6420    IN      A       87.250.250.203
ya.ru.                  6420    IN      A       93.158.134.3
ya.ru.                  6420    IN      A       87.250.250.3
ya.ru.                  6420    IN      A       77.88.21.3

6. Краткий вывод команды dig

Допустим чтобы просмотреть только ip-адрес, без лишней информации, используем опцию +short

$ dig ya.ru +short
213.180.193.3
93.158.134.203
87.250.250.203
77.88.21.3
213.180.204.3
87.250.250.3
93.158.134.3
87.250.251.3

Также интересно:

Вы также можете вывести информацию по любому виду информации с ключем +short
Пример:

$ dig ya.ru ns +short
ns5.yandex.ru.
ns1.yandex.ru.

7. Просмотр информации об обратной зоне домена (PTR)

Для просмотра обратной зоны необходимо использовать ключ -х
Для примера, мы хотим узнать имя домена по айпи-адресу 77.88.21.3


$ dig -x 77.88.21.3 +short
www.yandex.ru


Для вывода полной информации убираем ключ +short


$dig -x 77.88.21.3

; <<>> DiG 9.7.3 <<>> -x 77.88.21.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 885
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;3.21.88.77.in-addr.arpa.       IN      PTR

;; ANSWER SECTION:
3.21.88.77.in-addr.arpa. 11007  IN      PTR     www.yandex.ru

;; Query time: 2 msec
;; SERVER: 10.218.138.252#53(10.218.138.252)
;; WHEN: Fri Mar 23 16:21:23 2012
;; MSG SIZE  rcvd: 68


8. Использование конкретного DNS-сервера для выполнения запроса

Для использования конкретного DNS-сервераиспользуется запись вида - @dnsserver, где dnsserver это или имя или ip-адрес DNS-сервера
Данный пример мы рассмотрели в п.1

9. Объемный запрос (запрос информации сразу о нескольких доменах)

Для запроса информации о нескольких доменах возможно использование текстовых файлов с перечислением доменов.
Создадим файл names.txt с именами доменов:


$nano names.txt
ya.ru
google.ru

Далее используем ключ -f для чтения из файла:

$ dig -f names.txt +noall +answer
ya.ru.                  5241    IN      A       87.250.251.3
ya.ru.                  5241    IN      A       93.158.134.203
ya.ru.                  5241    IN      A       213.180.193.3
ya.ru.                  5241    IN      A       87.250.250.203
ya.ru.                  5241    IN      A       93.158.134.3
ya.ru.                  5241    IN      A       87.250.250.3
ya.ru.                  5241    IN      A       77.88.21.3
ya.ru.                  5241    IN      A       213.180.204.3
google.ru.              231     IN      A       74.125.232.55
google.ru.              231     IN      A       74.125.232.56
google.ru.              231     IN      A       74.125.232.63

Также можно комбинировать тип DNS записи c опцией -f:


$dig -f names.txt MX +noall +answer
ya.ru.                  184     IN      MX      10 mx.yandex.ru.
google.ru.              10800   IN      MX      10 google.com.s9b1.psmtp.com.
google.ru.              10800   IN      MX      10 google.com.s9a2.psmtp.com.
google.ru.              10800   IN      MX      10 google.com.s9b2.psmtp.com.
google.ru.              10800   IN      MX      10 google.com.s9a1.psmtp.com.

Также возможно перечисление доменов непосредственно в командной строке. Для примера узнаем MX-запись для домена ya.ru и NS-запись для домена google.ru:


dig ya.ru mx +noall +answer google.ru ns +noall +answer

; <<>> DiG 9.7.3 <<>> ya.ru mx +noall +answer google.ru ns +noall +answer
;; global options: +cmd
ya.ru.                  7143    IN      MX      10 mx.yandex.ru.
google.ru.              66518   IN      NS      ns4.google.com.
google.ru.              66518   IN      NS      ns3.google.com.
google.ru.              66518   IN      NS      ns1.google.com.
google.ru.              66518   IN      NS      ns2.google.com.


10. Изменение параметров по умолчанию для команды dig

Например вы хотите, чтобы утилита dig по умолчанию выводила только секцию ответа (ANSWER SECTION).
Для этого необходимо внести в файл .digrc необходимые ключи, в нашем случае +noall +answer:


$nano $HOME/.digrc
+noall +answer

Вывод будет:


$ dig ya.ru
ya.ru.                  4162    IN      A       93.158.134.203
ya.ru.                  4162    IN      A       213.180.193.3
ya.ru.                  4162    IN      A       87.250.250.203
ya.ru.                  4162    IN      A       93.158.134.3
ya.ru.                  4162    IN      A       87.250.250.3
ya.ru.                  4162    IN      A       77.88.21.3
ya.ru.                  4162    IN      A       213.180.204.3
ya.ru.                  4162    IN      A       87.250.251.3

Таким образом мы рассмотрели мизерную часть этой замечательной утилиты, для тех, кто хочет большего, добро пожаловать в man dig ;)

Взято отсюда.