12 байт, после которого следуют
Общая длина заголовка - 12 байт, после которого следуют поля переменной длины. Нас будут интересовать только секции вопросов и ответов. В пакете от клиента количество вопросов, как правило, равно единице. А в пакете от сервера количество ответов как минимум один. Остальные счетчики будем устанавливать в ноль.
Обе секции (вопросы и ответы) имеют одинаковое начало: переменное количество байт, отведенное на имя, два байта на тип, и два - на класс. Класс будет всегда единицей. Типы - A, NS, MX, CNAME и т.д. Например, для типа A поле будет установлено в единицу, а для MX - 15. Для запросов и ответов имя кодируется одинаково. Все символы представляются своими ASCII кодами за исключением точек. Точки разделяют имя на части, а сами заменяются длинами этих частей. Для примера: www.yahoo.com.
Будет представлено в виде последовательности байт: 3www5yahoo3com0 - буквы представляются кодами.
При этом финальный ноль является обязательным, т.к. является маркером конца имени.
Теперь у нас есть достаточно информации, чтобы составить клиентский пакет, который запрашивает IP адрес хоста "aaa."
byte[] question={2,34,1,0,0,1,0,0,0,0,0,0,3,97,97,97,0,0,1,0,1};
2,34 - это идентификаторы, выбранные случайным образом
За ними следуют два байта флагов, которые сообщают о том, что это стандартный запрос, требующий рекурсию.
Следующие два байта - это кол-во вопросов, т.е. один. При этом остальных полей переменной длины нет.
Вопрос начинается сразу после заголовка - 12й байт, считая с нуля.
Такую же последовательность, за исключением идентификатора, можно увидеть сетевым монитором, сформировав запрос "aaa" с помощью утилиты nslookup.
В общем случае, сервер, приняв подобный пакет, должен выделить имя и тип.
//получение текста имени из вопроса int i=12; String s=""; String QUESTION;
while (data[i]>0) { if (s.length()>0) {s+=".";} if ((data[i]+i+1)>=len) {s="";break;} s += new String(data, i+1, data[i]); i+=data[i]+1; } QUESTION = s;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий