Шаг 6 - Разбор примера запроса и ответа

Вернемся к запросу, который я сформировал, а вернее - моя программа сформировала, он был показан ранее во врезках, и как видим я запрашивал:

------------------------------
ID .... : 1234
FLAGS . : RD
QDCOUNT : 1
ANCOUNT : 0
NSCOUNT : 0
ARCOUNT : 0
------------------------------
QNAME . : www.netvision.net.il
TYPE .. : A
CLASS . : IN
------------------------------

Header - Заголовок

Идентификатор ID может быть выбран случайным образом, он нужен вам для учета. Но я бы советовал вырабатывать номера по порядку, хотя и не обязательно с единицы. Однако я для опыта выбрал 1234 в шестнадцатиричном формате. Запросил возможность рекурсивного обращения RD, на всякий случай. Количество пунктов в поле 'Question' у меня - один. Так я в счетчике QDCOUNT и указал. Остальные счетчики - не моя забота, а сервера. Пусть он и ставит что полагается. А я забил нулями.

Question - Вопрос

QNAME - www.netvision.net.il - имя интересующего меня хоста.
TYPE  - А - что желаю получить -  IP адрес.
CLASS - IN - сетка - Интернет.

Ну, что, пока все ясно ? Ну, я рад.

Теперь смотрим, что я получил в ответ :

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
-----------------------------------------------
00 95 12 34 85 80 00 01 00 01 00 02 00 02 03 77         ...4...........w
77 77 09 6E 65 74 76 69 73 69 6F 6E 03 6E 65 74         ww.netvision.net
02 69 6C 00 00 01 00 01 C0 0C 00 01 00 01 00 01         .il.............
51 80 00 04 C2 5A 01 0A 09 6E 65 74 76 69 73 69         Q....Z...netvisi
6F 6E 03 6E 65 74 02 69 6C 00 00 02 00 01 00 01         on.net.il.......
51 80 00 06 03 64 6E 73 C0 36 C0 36 00 02 00 01         Q....dns.6.6....
00 01 51 80 00 11 05 6E 79 70 6F 70 05 65 6C 72         ..Q....nypop.elr
6F 6E 03 6E 65 74 00 C0 52 00 01 00 01 00 01 51         on.net..R......Q
80 00 04 C2 5A 01 05 C0 64 00 01 00 01 00 01 51         ....Z...d......Q
80 00 04 C7 CB 01 14 00 00 00 00 00 00 00 00 00         ................
-------------------^ это последний байт ответа

А теперь посмотрим результаты работы моей функции декодирования:

-------- Results of Query -------

**. DataBlock Length -------- : 0097 --- 151 bytes.
**. Query Length ------------ : 0095 --- 149 bytes.

========== Header ==========
00. ID ------ Identifier      : 1234
01. QR  ----- Query/Response  : 0001
02. OPCODE -- Opcode          : 0000
03. AA ------ Autoritate      : 0001
04. TC ------ Truncation      : 0000
05. RD ------ RecursDesired   : 0001
06. RA ------ RecursAvailable : 0001
07. Z ------- RFU             : 0000
08. RCODE --- ResponseCode    : 0000
09. QDCOUNT - N of Questions  : 0001
0A. ANCOUNT - N of Answers    : 0001
0B. NSCOUNT - N of Authority  : 0002
0C. ARCOUNT - N 0f Additions  : 0002
======= Question ===========
www.netvision.net.il
TYPE = A, CLASS = IN
============================


========= Response =========
www.netvision.net.il
TYPE = A, CLASS = IN
RDLENGTH = 0004
IP address = 194.90.1.10
============================
netvision.net.il
TYPE = NS, CLASS = IN
RDLENGTH = 0006
NS server : dns.netvision.net.il
============================
netvision.net.il
TYPE = NS, CLASS = IN
RDLENGTH = 0011
NS server : nypop.elron.net
============================
dns.netvision.net.il
TYPE = A, CLASS = IN
RDLENGTH = 0004
IP address = 194.90.1.5
============================
nypop.elron.net
TYPE = A, CLASS = IN
RDLENGTH = 0004
IP address = 199.203.1.20
============================

Даже и не знаю, что еще можно объяснять. Я постарался выцарапать из ответа все, что только можно и отобразить на экране. Ну, и попутно скинуть на винт в виде файла. Если кому не лень, тот может пройтись по "бинарному" ответу и заметить, что часть имен хостов представлена в обычном виде, а часть в упакованном, о чем я и говорил раньше. Так что убедитесь.

Ну, вот. Кажется и все пока. Если что будет новое, то обновим этот документ. Разве что можно еще взглянуть со стороны на моего примитивного NS-lookup клиента. Пожалуй, стоит его причесать, и вставить в основную мою программу - почтового сервера для персонального использования, в виде дополнительной опции.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Alex Zzlex.