Ejemplo n.º 1
0
        private static int ParseAnswer(Record[] records, int current, byte[] packet, int start)
        {
            var i = start;

            var name = "";

            i = ParseName(ref name, packet, i);

            var type = RecordType.None;

            if (!DNSGenerator.TryGenerateRecordType(ref type, packet[i++] * 256 + packet[i++]))
            {
                throw new MailformRequestException();
            }

            i += 2;
            uint ttl     = (uint)packet[i++] * (uint)16777216 + (uint)packet[i++] * (uint)65536 + (uint)packet[i++] * (uint)256 + (uint)packet[i++];
            var  dLength = packet[i++] * 256 + packet[i++];

            object data = null;

            i = ParseRecordData(ref data, packet, type, i, dLength);

            records[current] = new Record(name, type, ttl, data);

            return(i);
        }
Ejemplo n.º 2
0
 public void Resolve()
 {
     byte[] answerPack;
     try
     {
         var request = DNSParser.ParseRequest(requestPack);           //DONE
         var answer  = resolver.ResolveNames(request);                //DONE
         answerPack = DNSGenerator.GenerateResponse(answer, request); //DONE
     }
     catch
     {
         answerPack = backupResolver.ResolveQuestion(requestPack);
     }
     mainUI.SendAnswer(connect, answerPack);
 }
Ejemplo n.º 3
0
        //возвращает длину строки, которая является максимальным общим суффиксом и добавляет её адрес в sufAddr
        public int ReadNameAndUpdate(string name, ref int sufAddr, int nameAddr)
        {
            //создаем массивы кодов, чтобы удобнее работать с деревом
            var nameCodes = DNSGenerator.GenerateZones(name);

            var newName = nameCodes.Select(x => Encoding.UTF8.GetString(x)).ToArray();

            //добавочная длина, прибавляемая к адресу. Получается из длины всех массивов
            var nameLength = nameCodes.Select(x => x.Length + 1).Sum();

            //вызываем поиск с конца оповторяя рекурсивно от рута, до хоста
            int length = root.RNAU(nameCodes, nameCodes.Length - 1, ref sufAddr, nameAddr, nameLength, 0);

            return(length);
        }
Ejemplo n.º 4
0
        private static int ParseQuestion(Question[] questions, int current, byte[] packet, int startIndex)
        {
            int i      = startIndex;
            var domain = "";

            i = ParseName(ref domain, packet, i);

            int        typeNum = packet[i] * 256 + packet[i + 2];
            RecordType type    = RecordType.None;

            if (!DNSGenerator.TryGenerateRecordType(ref type, typeNum))
            {
                throw new MailformRequestException("Type with number " + typeNum + " has not found!");
            }

            var quest = new Question(domain, type);

            questions[current] = quest;

            return(i + 5);
        }