Esempio n. 1
0
        public async Task SecureQuery_HasRRs()
        {
            // See https://discuss.circleci.com/t/dns-response-missing-rrsig/24719
            if (Environment.GetEnvironmentVariable("CIRCLECI") == "true")
            {
                Assert.Inconclusive("Not testable on Circle CI");
            }

            var dns = new DnsClient();
            var query = new Message {
                RD = true
            }.UseDnsSecurity();

            query.Questions.Add(new Question {
                Name = "cloudflare-dns.com", Type = DnsType.A
            });
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);

            var opt = response.AdditionalRecords.OfType <OPTRecord>().Single();

            Assert.AreEqual(true, opt.DO);

            var rrsig = response.Answers.OfType <RRSIGRecord>().Single();

            Assert.AreEqual(DnsType.A, rrsig.TypeCovered);
        }
Esempio n. 2
0
        public async Task Query_EDNS()
        {
            var dns   = new DnsClient();
            var query = new Message
            {
                RD        = true,
                Questions =
                {
                    new Question {
                        Name = "ipfs.io", Type = DnsType.TXT
                    }
                },
                AdditionalRecords =
                {
                    new OPTRecord
                    {
                        DO      = true,
                        Options =
                        {
                            new EdnsNSIDOption(),
                            new EdnsKeepaliveOption(),
                            new EdnsPaddingOption {
                                Padding = new byte[]{    0, 0, 0, 0 }
                            }
                        }
                    }
                }
            };
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);
        }
Esempio n. 3
0
        public async Task Query_IPv6()
        {
            if (!SupportsIPv6)
            {
                Assert.Inconclusive("IPv6 not supported by OS.");
            }

            var dns = new DnsClient
            {
                Servers = new IPAddress[]
                {
                    IPAddress.Parse("2606:4700:4700::1111"), // cloudflare dns
                    IPAddress.Parse("2001:4860:4860::8888"), // google dns
                }
            };
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "ipfs.io", Type = DnsType.TXT
            });
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);
        }
Esempio n. 4
0
        public void Query_UnreachableServer()
        {
            var dns = new DnsClient
            {
                Servers = new IPAddress[] { IPAddress.Parse("127.0.0.2") }
            };

            ExceptionAssert.Throws <Exception>(() =>
            {
                var _ = dns.QueryAsync("ipfs.io", DnsType.A).Result;
            }, "No response from DNS servers.");
        }
Esempio n. 5
0
        public async Task TXT()
        {
            var dns      = new DnsClient();
            var response = await dns.QueryAsync("ipfs.io", DnsType.TXT);

            var strings = response.Answers
                          .OfType <TXTRecord>()
                          .SelectMany(txt => txt.Strings);

            foreach (var s in strings)
            {
                Console.WriteLine(s);
            }
        }
Esempio n. 6
0
        public async Task Query()
        {
            var dns   = new DnsClient();
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "ipfs.io", Type = DnsType.TXT
            });
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);
        }
Esempio n. 7
0
        public void Query_UnknownName()
        {
            var dns   = new DnsClient();
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "emanon.noname.google.com", Type = DnsType.A
            });
            ExceptionAssert.Throws <IOException>(() =>
            {
                var _ = dns.QueryAsync(query).Result;
            }, "DNS error 'NameError'.");
        }
Esempio n. 8
0
 public void Query_UnknownName_NoThrow()
 {
     using (var dns = new DnsClient {
         ThrowResponseError = false
     })
     {
         var query = new Message {
             RD = true
         };
         query.Questions.Add(new Question {
             Name = "emanon.noname.google.com", Type = DnsType.A
         });
         var result = dns.QueryAsync(query).Result;
         Assert.AreEqual(MessageStatus.NameError, result.Status);
     }
 }
Esempio n. 9
0
        public void Query_NoServers()
        {
            var dns = new DnsClient
            {
                Servers = new IPAddress[0]
            };
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "emanon.noname.google.com", Type = DnsType.A
            });
            ExceptionAssert.Throws <Exception>(() =>
            {
                var _ = dns.QueryAsync(query).Result;
            }, "No DNS servers are available.");
        }
Esempio n. 10
0
        public async Task Query_UdpTimeout()
        {
            var dns = new DnsClient
            {
                TimeoutUdp = TimeSpan.FromMilliseconds(0),
                Servers    = new IPAddress[] { IPAddress.Parse("8.8.8.8") } // google supports TCP!
            };
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "ipfs.io", Type = DnsType.TXT
            });
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);
        }
Esempio n. 11
0
        public void Query_Timeout()
        {
            var dns = new DnsClient
            {
                TimeoutUdp = TimeSpan.FromMilliseconds(1),
                TimeoutTcp = TimeSpan.FromMilliseconds(1)
            };
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "ipfs-x.io", Type = DnsType.TXT
            });
            ExceptionAssert.Throws <IOException>(() =>
            {
                var _ = dns.QueryAsync(query).Result;
            }, "No response from DNS servers.");
        }
Esempio n. 12
0
        public async Task Query_OneDeadServer()
        {
            var dns = new DnsClient
            {
                Servers = new IPAddress[]
                {
                    IPAddress.Parse("127.0.0.1"),
                    IPAddress.Parse("8.8.8.8")
                }
            };
            var query = new Message {
                RD = true
            };

            query.Questions.Add(new Question {
                Name = "ipfs.io", Type = DnsType.TXT
            });
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);
        }