Ejemplo n.º 1
0
        private static void VerifyAnswer(DnsPacket dnsPacket, string StrAddressExpected, int ttl)
        {
            Assert.IsTrue(dnsPacket.TransactionId == 0x000a);
            //Assert.IsTrue(0x8180 == dnsPacket.Flags.Flag);
            Assert.IsTrue(dnsPacket.Flags.IsOpcodeValid);
            Assert.IsTrue(dnsPacket.Flags.Rd);
            Assert.IsTrue(dnsPacket.Flags.Qr);
            Assert.IsTrue(dnsPacket.Flags.Ra);
            Assert.IsTrue(1 == dnsPacket.Body.Qdcount);
            Assert.IsTrue(1 == dnsPacket.Body.Ancount);
            Assert.IsTrue(0 == dnsPacket.Body.Arcount);
            Assert.IsTrue(0 == dnsPacket.Body.Nscount);
            Assert.IsTrue(1 == dnsPacket.Body.Queries.Count);
            Assert.IsTrue(1 == dnsPacket.Body.Answers.Count);
            DnsPacket.Query q = dnsPacket.Body.Queries[0];
            Assert.IsTrue(DnsPacket.TypeType.Mx == q.Type);
            Assert.IsTrue(DnsPacket.ClassType.InClass == q.QueryClass);
            Assert.AreEqual(q.Name.GetFullName(), StrQueryDomainName);

            DnsPacket.Answer a = dnsPacket.Body.Answers[0];
            Assert.IsTrue(DnsPacket.ClassType.InClass == a.AnswerClass);
            Assert.IsTrue(ttl == a.Ttl);
            Assert.IsTrue(DnsPacket.TypeType.Mx == a.Type);
            Assert.AreEqual(a.Name.GetFullName(), StrQueryDomainName);
            Assert.IsTrue(a.Payload is MxInfo);
            MxInfo mi = (MxInfo)a.Payload;

            Assert.AreEqual(mi.Mx.GetFullName(), "smtpin.vvv.facebook.com");
            Assert.AreEqual(mi.Preference, 10);
        }
Ejemplo n.º 2
0
        private static void VerifyAnswer(DnsPacket dnsPacket, string StrAddressExpected, int ttl)
        {
            Assert.AreEqual(dnsPacket.TransactionId, (ushort)0x1622);
            //Assert.AreEqual((ushort)0x8180, dnsPacket.Flags.Flag);
            Assert.IsTrue(dnsPacket.Flags.IsOpcodeValid);
            Assert.IsTrue(dnsPacket.Flags.Rd);
            Assert.IsTrue(dnsPacket.Flags.Qr);
            Assert.IsTrue(dnsPacket.Flags.Ra);
            Assert.IsTrue(1 == dnsPacket.Body.Qdcount);
            Assert.IsTrue(0 == dnsPacket.Body.Ancount);
            Assert.IsTrue(0 == dnsPacket.Body.Arcount);
            Assert.IsTrue(0 == dnsPacket.Body.Nscount);
            Assert.IsTrue(1 == dnsPacket.Body.Queries.Count);
            Assert.IsTrue(null == dnsPacket.Body.Answers);
            DnsPacket.Query q = dnsPacket.Body.Queries[0];
            Assert.AreEqual(DnsPacket.TypeType.Aaaa, q.Type);
            Assert.AreEqual(DnsPacket.ClassType.InClass, q.QueryClass);
            Assert.AreEqual(q.Name.GetFullName(), StrQueryDomainName);

            //DnsPacket.Answer a = dnsPacket.Body.Answers[0];
            //Assert.IsTrue(DnsPacket.ClassType.InClass == a.AnswerClass);
            //Assert.IsTrue(ttl == a.Ttl);
            //Assert.IsTrue(DnsPacket.TypeType.Aaaa == a.Type);
            //Assert.AreEqual(a.Name.GetFullName(), StrQueryDomainName);

            //VerifyPayloadAddressV6(a, StrAddressExpected);
        }
Ejemplo n.º 3
0
        private static void VerifyAnswer(DnsPacket dnsPacket, string StrAddressExpected, int ttl)
        {
            Assert.IsTrue(dnsPacket.TransactionId == 0xf478);
            //Assert.IsTrue(0x8180 == dnsPacket.Flags.Flag);
            Assert.IsTrue(dnsPacket.Flags.IsOpcodeValid);
            Assert.IsTrue(dnsPacket.Flags.Rd);
            Assert.IsTrue(dnsPacket.Flags.Qr);
            Assert.IsTrue(dnsPacket.Flags.Ra);
            Assert.IsTrue(1 == dnsPacket.Body.Qdcount);
            Assert.IsTrue(0 == dnsPacket.Body.Arcount);
            Assert.IsTrue(1 == dnsPacket.Body.Ancount);
            Assert.IsTrue(0 == dnsPacket.Body.Nscount);
            Assert.IsTrue(1 == dnsPacket.Body.Queries.Count);
            Assert.IsTrue(1 == dnsPacket.Body.Answers.Count);
            DnsPacket.Query q = dnsPacket.Body.Queries[0];
            Assert.IsTrue(DnsPacket.TypeType.A == q.Type);
            Assert.IsTrue(DnsPacket.ClassType.InClass == q.QueryClass);
            VerifyName(q.Name.Name, StrQueryDomainName);

            DnsPacket.Answer a = dnsPacket.Body.Answers[0];
            Assert.IsTrue(DnsPacket.ClassType.InClass == a.AnswerClass);
            Assert.IsTrue(ttl == a.Ttl);
            Assert.IsTrue(DnsPacket.TypeType.A == a.Type);
            VerifyRefName(a.Name.Name);

            VerifyPayloadAddress(a, StrAddressExpected);
        }
Ejemplo n.º 4
0
        public void ParseInvalidRefNameLength()
        {
            // Modify name segment length to exceed packet data end
            // offset 36, 0xC0, -> pointer, offset 0 << 8 + data[37]
            // offset 37, 0x0C, -> begining of name in header, 'china'
            // modify offset as 24, so that offset + length >= data size, i.e. 36

            byte[] byteData = udpPackets[2].PayloadData;
            Assert.IsTrue(0xC0 == byteData[36]);
            Assert.IsTrue(0x0C == byteData[37]);

            byteData[36] = 0xC1;
            byteData[37] = (byte)byteData.Length;
            //try
            {
                DnsPacket dnsPacket = new DnsPacket(new KaitaiStream(byteData));

                DnsPacket.Query q = dnsPacket.Body.Queries[0];
                VerifyName(q.Name.Name, StrQueryDomainName);

                DnsPacket.Answer a = dnsPacket.Body.Answers[0];
                Assert.IsTrue(DnsPacket.ClassType.InClass == a.AnswerClass);
                Assert.IsTrue(600 == a.Ttl);
                Assert.IsTrue(DnsPacket.TypeType.A == a.Type);
                //VerifyRefName(a.Name.Name);
                {
                    Assert.AreEqual((int)1, a.Name.Name.Count);
                    Label l = a.Name.Name[0];
                    Assert.IsTrue(l.IsPointer);
                    Assert.IsTrue(0xC1 == l.Length);
                    Assert.IsTrue(byteData.Length == l.Pointer.Value);

                    PointerStruct ps = l.Pointer;
                    try
                    {
                        VerifyName(ps.Contents.Name, StrQueryDomainName);
                    }
                    catch (System.IO.EndOfStreamException)
                    {
                        Assert.IsTrue(true);
                    }
                }
            }
            //catch (System.IO.EndOfStreamException)
            {
                Assert.IsTrue(true);
            }

            return;
        }
Ejemplo n.º 5
0
        private static void VerifyAnswer(DnsPacket dnsPacket, string StrAddressExpected, int ttl)
        {
            Assert.AreEqual(dnsPacket.TransactionId, (ushort)0x0006);
            //Assert.AreEqual((ushort)0x8180, dnsPacket.Flags.Flag);
            Assert.IsTrue(dnsPacket.Flags.IsOpcodeValid);
            Assert.IsTrue(dnsPacket.Flags.Rd);
            Assert.IsTrue(dnsPacket.Flags.Qr);
            Assert.IsTrue(dnsPacket.Flags.Ra);
            Assert.AreEqual((ushort)1, dnsPacket.Body.Qdcount);
            Assert.AreEqual((ushort)1, dnsPacket.Body.Ancount);
            Assert.AreEqual(1, dnsPacket.Body.Nscount);
            Assert.AreEqual(0, dnsPacket.Body.Arcount);
            Assert.IsTrue(1 == dnsPacket.Body.Queries.Count);
            Assert.IsTrue(1 == dnsPacket.Body.Answers.Count);
            Assert.IsTrue(1 == dnsPacket.Body.Authorities.Count);
            DnsPacket.Query q = dnsPacket.Body.Queries[0];
            Assert.IsTrue(DnsPacket.TypeType.Aaaa == q.Type);
            Assert.IsTrue(DnsPacket.ClassType.InClass == q.QueryClass);
            VerifyName(q.Name.Name, StrQueryDomainName);

            DnsPacket.Answer a = dnsPacket.Body.Answers[0];
            Assert.AreEqual(DnsPacket.ClassType.InClass, a.AnswerClass);
            Assert.AreEqual(ttl, a.Ttl);
            Assert.AreEqual(DnsPacket.TypeType.Cname, a.Type);

            VerifyRefName(a.Name.Name);

            DnsPacket.Answer ns = dnsPacket.Body.Authorities[0];
            Assert.AreEqual(DnsPacket.ClassType.InClass, ns.AnswerClass);
            Assert.AreEqual(37, ns.Ttl);
            Assert.AreEqual(DnsPacket.TypeType.Soa, ns.Type);
            Assert.AreEqual(53, ns.Rdlength);
            Assert.AreEqual(ns.Payload.GetType(), typeof(DnsPacket.AuthorityInfo));
            Assert.AreEqual(ns.Name.GetFullName(), "github.com");

            DnsPacket.AuthorityInfo nsInfo = (DnsPacket.AuthorityInfo)ns.Payload;
            Assert.AreEqual(nsInfo.ExpireLimit, (uint)604800);
            Assert.AreEqual(nsInfo.MinTtl, (uint)60);
            Assert.AreEqual(nsInfo.Serial, (uint)1592319081);
            Assert.AreEqual(nsInfo.RetryInterval, (uint)600);
            Assert.AreEqual(nsInfo.RefreshInterval, (uint)3600);
            VerifyName(nsInfo.PrimaryNs.Name, "ns1.p16.dynect.net");
            Assert.AreEqual(nsInfo.ResoponsibleMailbox.GetFullName(), "hostmaster.github.com");
        }
Ejemplo n.º 6
0
        public void ParseRequest()
        {
            DnsPacket dnsPacket = new DnsPacket(new KaitaiStream(udpPackets[1].PayloadData));

            Assert.AreEqual(dnsPacket.TransactionId, (ushort)0x1622);
            //Assert.AreEqual((ushort)0x0100, dnsPacket.Flags.Flag);
            Assert.IsTrue(dnsPacket.Flags.IsOpcodeValid);
            Assert.IsTrue(dnsPacket.Flags.Rd);
            Assert.AreEqual((ushort)1, dnsPacket.Body.Qdcount);
            Assert.IsTrue(0 == dnsPacket.Body.Arcount);
            Assert.IsTrue(0 == dnsPacket.Body.Ancount);
            Assert.IsTrue(0 == dnsPacket.Body.Nscount);
            Assert.AreEqual((ushort)1, dnsPacket.Body.Queries.Count);
            DnsPacket.Query q = dnsPacket.Body.Queries[0];
            Assert.AreEqual(DnsPacket.TypeType.Aaaa, q.Type);
            Assert.AreEqual(DnsPacket.ClassType.InClass, q.QueryClass);
            Assert.AreEqual(q.Name.GetFullName(), StrQueryDomainName);

            return;
        }
Ejemplo n.º 7
0
        public void ParseRequest()
        {
            DnsPacket dnsPacket = new DnsPacket(new KaitaiStream(udpPackets[8].PayloadData));

            Assert.IsTrue(dnsPacket.TransactionId == 0x000a);
            //Assert.IsTrue(0x0100 == dnsPacket.Flags.Flag);
            Assert.IsTrue(dnsPacket.Flags.IsOpcodeValid);
            Assert.IsTrue(dnsPacket.Flags.Rd);
            Assert.IsTrue(1 == dnsPacket.Body.Qdcount);
            Assert.IsTrue(0 == dnsPacket.Body.Arcount);
            Assert.IsTrue(0 == dnsPacket.Body.Ancount);
            Assert.IsTrue(0 == dnsPacket.Body.Nscount);
            Assert.IsTrue(1 == dnsPacket.Body.Queries.Count);
            DnsPacket.Query q = dnsPacket.Body.Queries[0];
            Assert.IsTrue(DnsPacket.TypeType.Mx == q.Type);
            Assert.IsTrue(DnsPacket.ClassType.InClass == q.QueryClass);
            VerifyName(q.Name.Name, StrQueryDomainName);

            return;
        }
Ejemplo n.º 8
0
 public DnsQuery(DnsPacket.Query dnsQuery)
 {
     this.Type = dnsQuery.Type;
     this.Name = dnsQuery.Name.ToJoinedString();
 }
Ejemplo n.º 9
0
        public void ParseLoopRefNameOffset()
        {
            // Modify name segment length to exceed packet data end
            // offset 36, 0xC0, -> pointer, offset 0 << 8 + data[37]
            // offset 37, 0x0C, -> begining of name in header, 'china'
            // modify offset as 24, so that offset + length >= data size, i.e. 36

            byte[] byteData = udpPackets[2].PayloadData;
            Assert.IsTrue(0xC0 == byteData[36]);
            Assert.IsTrue(0x0C == byteData[37]);

            byteData[36] = 0xC0;
            byteData[37] = 36;
            //try
            {
                DnsPacket dnsPacket = new DnsPacket(new KaitaiStream(byteData));

                DnsPacket.Query q = dnsPacket.Body.Queries[0];
                VerifyName(q.Name.Name, StrQueryDomainName);

                DnsPacket.Answer a = dnsPacket.Body.Answers[0];
                Assert.IsTrue(DnsPacket.ClassType.InClass == a.AnswerClass);
                Assert.IsTrue(600 == a.Ttl);
                Assert.IsTrue(DnsPacket.TypeType.A == a.Type);
                //VerifyRefName(a.Name.Name);
                {
                    Assert.AreEqual((int)1, a.Name.Name.Count);
                    Label l = a.Name.Name[0];
                    Assert.IsTrue(l.IsPointer);
                    Assert.IsTrue(0xC0 == l.Length);
                    Assert.IsTrue(36 == l.Pointer.Value);

                    PointerStruct ps = l.Pointer;
                    try
                    {
                        //VerifyName(ps.Contents.Name, StrQueryDomainName);
                        Assert.AreEqual(1, ps.Contents.Name.Count);
                        Label l2 = ps.Contents.Name[0];
                        Assert.AreEqual(true, l2.IsPointer);
                        Assert.AreEqual(0xC0, l2.Length);
                        Assert.AreEqual((byte)36, l2.Pointer.Value);
                    }
                    catch (Exception)
                    {
                        Assert.Fail();
                    }

                    // Try to get full name will cause exception
                    try
                    {
                        Assert.AreEqual(a.Name.GetFullName(), "");
                        Assert.Fail("Exception expected");
                    }
                    catch (ArgumentOutOfRangeException e)
                    {
                        Console.WriteLine("Exception expected in detecting ref loop: {0}", e.Message);
                    }
                }
            }
            //catch (System.IO.EndOfStreamException)
            {
                Assert.IsTrue(true);
            }

            return;
        }