Example #1
0
        static public c**t Parse(byte[] onlyReplyCode)
        {
            ReplyCodeBuilder replyCode = new ReplyCodeBuilder();

            replyCode.isQuery             = (onlyReplyCode[2] & 1) == 1;
            replyCode.authoritativeAnswer = (onlyReplyCode[2] & 16) == 16;
            replyCode.truncation          = (onlyReplyCode[2] & 32) == 32;
            replyCode.recursionDesired    = (onlyReplyCode[2] & 64) == 64;
            replyCode.recursionAvailable  = (onlyReplyCode[2] & 128) == 128;
            replyCode.opCode       = (Opcode)(onlyReplyCode[2] & 14);
            replyCode.responseCode = (ResponseCodes)(onlyReplyCode[3] & 240);
            replyCode.questions    = (ushort)((onlyReplyCode[4] << 8) | onlyReplyCode[5]);
            replyCode.answers      = (ushort)((onlyReplyCode[6] << 8) | onlyReplyCode[7]);
            replyCode.authorities  = (ushort)((onlyReplyCode[8] << 8) | onlyReplyCode[9]);
            replyCode.additional   = (ushort)((onlyReplyCode[10] << 8) | onlyReplyCode[11]);
            return(new c**t(replyCode));
        }
Example #2
0
        static void Benchmark(int repetitions)
        {
            Domain domain = new Domain("org");
            var    thing  = domain.AddSubdomain(new Domain("iansweb"));

            thing.AddSubdomain(new Domain("forum")).A_Records.Add(new DNS.Messages.Records.A(new byte[] { 127, 0, 0, 1 }));
            thing.A_Records.Add(new DNS.Messages.Records.A(new byte[] { 127, 0, 0, 1 }));
            var now = DateTime.Now;

            for (int i = 0; i < repetitions; i++)
            {
                var parsed = Parser.Parse(ahh);
                //var ans = record.GetAnswer(parsed.Questions[0]);
                List <Answer> answers = new List <Answer>();


                foreach (var question in parsed.Questions)
                {
                    var      ams      = domain.RetrieveSubDomain(question.RawBytes);
                    Answer[] answerss = new Answer[0];
                    if (ams != null)
                    {
                        answerss = ams.GetAnswers(question);
                    }
                    if (ams == null)
                    {
                        Console.WriteLine($"{question.Raw} {question.Type} {question.Class} -> Name not found");
                    }
                    else
                    {
                        if (answerss.Length < 1)
                        {
                            Console.WriteLine($"{question.Raw} {question.Type} {question.Class} -> No records found");
                        }
                        else
                        {
                            Console.WriteLine($"{question.Raw} {question.Type} {question.Class} -> {ams.FQDN}");
                            foreach (var a in answerss)
                            {
                                Console.WriteLine($"\t{a.StringFQDN} -> {a.a}");
                            }
                        }
                    }
                }
                ReplyCodeBuilder replyCodeBuilder = new ReplyCodeBuilder();
                replyCodeBuilder.answers             = (ushort)answers.Count;
                replyCodeBuilder.questions           = parsed.QuestionCount;
                replyCodeBuilder.isQuery             = false;
                replyCodeBuilder.recursionAvailable  = false;
                replyCodeBuilder.recursionDesired    = false;
                replyCodeBuilder.responseCode        = Header.ResponseCodes.NOERROR;
                replyCodeBuilder.truncation          = false;
                replyCodeBuilder.authorities         = 0;
                replyCodeBuilder.authoritativeAnswer = true;
                replyCodeBuilder.additional          = 0;
                HeaderBuilder headerBuilder = new HeaderBuilder(replyCodeBuilder);
                headerBuilder.id = parsed.Id;
                DnsMessage dnsMessage = new DnsMessage(headerBuilder)
                {
                    Answers = answers.ToArray(), Questions = parsed.Questions
                };
                var pa = Parser.Parse(Serializer.Serialize(dnsMessage));
            }
            var time = DateTime.Now.Subtract(now);

            Console.WriteLine($"Approximate Execution Time:\r\n{((double)time.Ticks * 100000 / (double)repetitions)} Picoseconds\r\n{(double)(((double)time.Ticks / (double)repetitions) * 100)} Nanoseconds\r\n{((double)time.Milliseconds / repetitions)} Milliseconds\r\n({time.Ticks} Ticks * 100000 / {repetitions} Repetitions)");
        }
Example #3
0
        static void DoThing()
        {
            DateTime start;
            TimeSpan recieving;
            TimeSpan parsing;
            TimeSpan answering;
            TimeSpan sending;
            DateTime end;

            start = DateTime.Now;
            var parsed = Parser.Parse(Recieve(ref start, out recieving));

            parsing = DateTime.Now.Subtract(start);
            List <Answer> answers = new List <Answer>();

            ReplyCodeBuilder replyCodeBuilder = new ReplyCodeBuilder
            {
                isQuery             = false,
                recursionAvailable  = false,
                recursionDesired    = false,
                truncation          = false,
                authorities         = 0,
                authoritativeAnswer = true,
                additional          = 0,
            };

            if (parsed.OpCode == Header.OpCodes.IQUERY)
            {
                replyCodeBuilder.responseCode = Header.ResponseCodes.SERVERFAILURE;
            }
            else
            {
                foreach (var question in parsed.Questions)
                {
                    var      ams      = domainHandler.RetrieveSubDomain(question.RawBytes);
                    Answer[] answerss = new Answer[0];
                    if (ams != null)
                    {
                        answerss = ams.GetAnswers(question);
                    }
                    if (ams == null)
                    {
                        Console.WriteLine($"{question.Raw} {question.Type} {question.Class} -> Name not found");
                        replyCodeBuilder.responseCode = Header.ResponseCodes.NAMEERROR;
                    }
                    else
                    {
                        if (answerss.Length < 1)
                        {
                            Console.WriteLine($"{question.Raw} {question.Type} {question.Class} -> No records found");
                        }
                        else
                        {
                            Console.WriteLine($"{question.Raw} {question.Type} {question.Class} -> {ams.FQDN}");
                            replyCodeBuilder.responseCode = Header.ResponseCodes.NOERROR;
                            answers.AddRange(answerss);
                            foreach (var a in answerss)
                            {
                                Console.WriteLine($"\t{question.Raw} -> {a.a}");
                            }
                        }
                    }
                }
            }
            answering = DateTime.Now.Subtract(start);
            replyCodeBuilder.answers   = (ushort)answers.Count;
            replyCodeBuilder.questions = parsed.QuestionCount;
            HeaderBuilder headerBuilder = new HeaderBuilder(replyCodeBuilder);

            headerBuilder.id = parsed.Id;
            DnsMessage dnsMessage = new DnsMessage(headerBuilder)
            {
                Answers = answers.ToArray(), Questions = parsed.Questions
            };

            sending = DateTime.Now.Subtract(start);
            udpSock.SendTo(Serializer.Serialize(dnsMessage), _groupEp);
            end = DateTime.Now;
            ShowWaterfall(start, end, new KeyValuePair <string, TimeSpan>[] { new KeyValuePair <string, TimeSpan>("Recieving", recieving), new KeyValuePair <string, TimeSpan>("Parsing", parsing), new KeyValuePair <string, TimeSpan>("Answering", answering), new KeyValuePair <string, TimeSpan>("Sending", sending) });
        }
Example #4
0
 public ReplyCode(ReplyCodeBuilder replyCode)
 {
     _questions = replyCode.questions; _answers = replyCode.answers; _authorities = replyCode.authorities; _additional = replyCode.additional; _authoritativeAnswer = replyCode.authoritativeAnswer; _isQuery = replyCode.isQuery; _truncation = replyCode.truncation; _recursionDesired = replyCode.recursionDesired; _recursionAvailable = replyCode.recursionAvailable; _opCode = replyCode.opCode; _responseCode = replyCode.responseCode;
 }