DNS сервер BIND хранит свой кэш (записи о доменах, которые уже запрашивали, и которые еще не потеряли свою актуальность) в оперативной памяти, а мне захотелось его посмотреть, чтобы проверить – есть ли там хоть что-то.

Решение простое. Делал на FreeBSD 7.1

Предполагается, что BIND DNS у вас уже установлен и работает.

В консоли пишем

 rndc dumpdb -cache

Потом идем

cd /var/named/var/dump/

и там находим фал дампа кэша BIND
называется он named_dump.db

А с ним уже делайте что хотите :) . Можно просто открыть и почитать записи, можно например перед тем, как сделать дамп, дать пинг на какое-нибудь экзотическое имя домена. У меня это cnn.com – я туда никогда не хожу :) .

т.е. сначала

ping cnn.com
PING cnn.com (157.166.224.25): 56 data bytes
^C

затем делаем запись кэша DNS в файл

 rndc dumpdb -cache

а потом поищем наш cnn.com в кэше.

 cat /var/named/var/dump/named_dump.db | grep cnn
cnn.com.                472     NS      twdns-04.ns.aol.com.

Все ок, cnn.com у нас есть в кэше. Такая проверка работает, если ваш компьютер использует только один DNS, который на ней же и установлен. Для достоверности можно сделать запрос сначала именно через свой DNS сервер, например так (у меня DNS слушает 127.0.0.1 т.е. внешних клиентов он не обслуживает).

dig @127.0.0.1 cnn.com

; <<>> DiG 9.4.2-P2 <<>> @127.0.0.1 cnn.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21149
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 4, ADDITIONAL: 0

;; QUESTION SECTION:
;cnn.com.                       IN      A

;; ANSWER SECTION:
cnn.com.                56      IN      A       157.166.226.25
cnn.com.                56      IN      A       157.166.226.26
cnn.com.                56      IN      A       157.166.224.25
cnn.com.                56      IN      A       157.166.224.26

;; AUTHORITY SECTION:
cnn.com.                356     IN      NS      twdns-04.ns.aol.com.
cnn.com.                356     IN      NS      twdns-03.ns.aol.com.
cnn.com.                356     IN      NS      twdns-01.ns.aol.com.
cnn.com.                356     IN      NS      twdns-02.ns.aol.com.

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 21 13:55:48 2009
;; MSG SIZE  rcvd: 188

ну а потом уже кэш в файл и там ищем cnn.

Ну или способ попроще :) .

В консоли пишем

dig @127.0.0.1 free.com

; <<>> DiG 9.4.2-P2 <<>> @127.0.0.1 free.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28468
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;free.com.                      IN      A

;; ANSWER SECTION:
free.com.               300     IN      A       64.38.232.180

;; AUTHORITY SECTION:
free.com.               172800  IN      NS      trafficdns1.ddc.com.
free.com.               172800  IN      NS      trafficdns2.ddc.com.

;; Query time: 377 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 21 13:58:16 2009
;; MSG SIZE  rcvd: 98

Нам интересна строка Query time: 377 msec Это время, которое ушло на запрос. 0.3 секунды.

Делаем этот же запрос еще раз

 dig @127.0.0.1 free.com

; <<>> DiG 9.4.2-P2 <<>> @127.0.0.1 free.com
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41728
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;free.com.                      IN      A

;; ANSWER SECTION:
free.com.               296     IN      A       64.38.232.180

;; AUTHORITY SECTION:
free.com.               172796  IN      NS      trafficdns1.ddc.com.
free.com.               172796  IN      NS      trafficdns2.ddc.com.

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Apr 21 13:58:20 2009
;; MSG SIZE  rcvd: 98

Видим, что Query time: 1 msec. В 300 раз быстрее :) . Данные взяты из кэша. Разумеется кэш имеет срок жизни. Администратор DNS сервера сам устанавливает TTL (Time To Live время жизни записей). После устаревания запись будет удалена из кэша, пока снова в него не поступит. Время жизни записи отображается в строке

;; ANSWER SECTION:
free.com. 300 IN A 64.38.232.180

это в первом запросе, во втором запросе значение другое

;; ANSWER SECTION:
free.com. 296 IN A 64.38.232.180

Часики тикают :) .
P.S. Адреса сайтов выбраны случайно, за их содержимое ответственности не несу :) .