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); }
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); }
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); }
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."); }
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); } }
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); }
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'."); }
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); } }
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."); }
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); }
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."); }
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); }