Как выглядит запрос DNS?

32

Я видел, как выглядит текстовое представление HTTP-запроса, но как выглядит DNS-запрос? Где в данных находится местоположение URL, который вы пытаетесь найти? Кроме того, как форматируется ответ?

AMWJ
источник
3
Лучше всего было бы скачать wireshark и перехватить пакеты, которые вы можете получить, чтобы получить полную картину того, что происходит, когда сделан запрос DNS.
Мрденни
1
кажется домашним вопросом
Jimsmithkka
2
@mydenny - нет, лучше всего сделать это с копией RFC1035 . Wireshark не даст вам полную картину, он может только показать вам, как выглядят конкретные пакеты, которые вы видели.
Альнитак,
@ Джим - это не @ mrdenny - я использовал Wireshark и не знаю, как необработанный запрос переходит в то, что я отправляю.
AMWJ

Ответы:

40

Это необработанный дамп из Wireshark DNS-запроса.

Часть DNS начинается с 24 1a:

0000  00 00 00 00 00 00 00 00  00 00 00 00 08 00 45 00   ........ ......E.
0010  00 3c 51 e3 40 00 40 11  ea cb 7f 00 00 01 7f 00   .<Q.@.@. ........
0020  00 01 ec ed 00 35 00 28  fe 3b 24 1a 01 00 00 01   .....5.( .;$.....
0030  00 00 00 00 00 00 03 77  77 77 06 67 6f 6f 67 6c   .......w ww.googl
0040  65 03 63 6f 6d 00 00 01  00 01                     e.com... ..      

А вот и разбивка:

Domain Name System (query)
    [Response In: 1852]
    Transaction ID: 0x241a
    Flags: 0x0100 (Standard query)
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... .0.. .... = Z: reserved (0)
        .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.google.com: type A, class IN
            Name: www.google.com
            Type: A (Host address)
            Class: IN (0x0001)

И ответ, снова начиная с 24 1а:

0000  00 00 00 00 00 00 00 00  00 00 00 00 08 00 45 00   ........ ......E.
0010  00 7a 00 00 40 00 40 11  3c 71 7f 00 00 01 7f 00   .z..@.@. <q......
0020  00 01 00 35 ec ed 00 66  fe 79 24 1a 81 80 00 01   ...5...f .y$.....
0030  00 03 00 00 00 00 03 77  77 77 06 67 6f 6f 67 6c   .......w ww.googl
0040  65 03 63 6f 6d 00 00 01  00 01 c0 0c 00 05 00 01   e.com... ........
0050  00 05 28 39 00 12 03 77  77 77 01 6c 06 67 6f 6f   ..(9...w ww.l.goo
0060  67 6c 65 03 63 6f 6d 00  c0 2c 00 01 00 01 00 00   gle.com. .,......
0070  00 e3 00 04 42 f9 59 63  c0 2c 00 01 00 01 00 00   ....B.Yc .,......
0080  00 e3 00 04 42 f9 59 68                            ....B.Yh         

Сломать:

Domain Name System (response)
    [Request In: 1851]
    [Time: 0.000125000 seconds]
    Transaction ID: 0x241a
    Flags: 0x8180 (Standard query response, No error)
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .0.. .... .... = Authoritative: Server is not an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 3
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.google.com: type A, class IN
            Name: www.google.com
            Type: A (Host address)
            Class: IN (0x0001)
    Answers
        www.google.com: type CNAME, class IN, cname www.l.google.com
            Name: www.google.com
            Type: CNAME (Canonical name for an alias)
            Class: IN (0x0001)
            Time to live: 3 days, 21 hours, 52 minutes, 57 seconds
            Data length: 18
            Primary name: www.l.google.com
        www.l.google.com: type A, class IN, addr 66.249.89.99
            Name: www.l.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 3 minutes, 47 seconds
            Data length: 4
            Addr: 66.249.89.99
        www.l.google.com: type A, class IN, addr 66.249.89.104
            Name: www.l.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 3 minutes, 47 seconds
            Data length: 4
            Addr: 66.249.89.104

Редактировать:

Обратите внимание, что если ваш реальный вопрос «как мне написать DNS-сервер?», То есть два соответствующих ответа:

Edit (2):

Запрос был отправлен с использованием hostна linux box:

host www.google.com

Если вы работаете в Windows, вы можете использовать nslookup

nslookup www.google.com
ngoozeff
источник
2
Не пересказывать проводную трассировку без ссылки на реальную спецификацию. Далеко слишком много DNS Interop проблем были вызваны людьми , полагая , что они могут осуществлять реинжиниринг от проводной трассы, и недостающие тонкие нюансы. В любом случае этого дампа недостаточно - он не демонстрирует, как кодируются метки и RR.
Альнитак
7
@Alnitak: я читаю вопрос как «что является примером запроса / ответа DNS», а не как выглядят все возможные запросы. Обновляется в случае, если это неверно.
ngoozeff
Как вы отправили запрос, чтобы получить это?
AMWJ
1
Я хотел бы знать, передаются ли параметры URL, используемые в браузерах, или это просто доменное имя? Так по этому вопросу, /questions/173187/what-does-a-dns-request-look-likeвключен ли в запрос?
СПРБР
1
@SPRBRN DNS не имеет дело с URL, только с именами доменов.
Хокан Линдквист
7

Расположение данных запроса DNS описано в RFC 1035 . Я думаю, что это немного бессмысленно копировать текст здесь ...

plaes
источник
5

К DNS-запросам и ответам лучше всего подходить, используя анализатор протоколов - Wireshark - это хороший кроссплатформенный инструмент, который может собирать и деконструировать запросы и ответы на их различные части. Хорошее введение в структуру DNS-запросов и ответов в Firewall.cx здесь .

DNS-запросы содержат вопросы, в которых указываются имя (или, возможно, несколько произвольное текстовое поле) и тип записи - содержание ответа будет зависеть от типа. Большинство запросов - это простой прямой поиск имени сервера в поисках ip-адреса в ответе (тип A), но некоторые будут искать дополнительную информацию о самих серверах имен (тип NS), почтовых записях (тип MX) и других сервисах (тип SRV, который будет возвращать имена, порты, веса и приоритеты). Ответы DNS содержат ответы на эти вопросы, возможно, более одного, если запрос требует этого и не всегда являются просто ip-адресами.

Еще одно уточнение - DNS не разрешает URL-адреса. В большинстве сценариев, связанных с URL-адресами, DNS используется только для того, чтобы система на стороне клиента могла найти ip-адрес серверной части URL-адреса, а все остальное обрабатывается другими протоколами.

Helvick
источник
3

Если вы можете попасть на компьютер с Linux, вы можете запустить команду dig для поиска DNS. Эта утилита выполняет поиск и возвращает именно то, на что отвечает сервер имен. Например:

; <<>> DiG 9.6.1-P2 <<>> serverfault.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32383
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
serverfault.com.        55961   IN      A       69.59.196.211

;; Query time: 21 msec
;; SERVER: 68.87.64.150#53(68.87.64.150)
;; WHEN: Sun Aug 22 09:21:35 2010
;; MSG SIZE  rcvd: 49

Все, что начинается с раздела «HEADER» - это то, что возвращается с сервера имен. Я предполагаю, что это то, что вы называете текстовым форматом, потому что это не формат реального пакета, а возвращаемый текст.

Пол Крон
источник