public async Task Lookup_RetryOnDnsErrorAsync() { var lookup = new LookupClient( new NameServer(IPAddress.Parse("127.0.0.1")), new NameServer(IPAddress.Parse("127.0.0.2")), new NameServer(IPAddress.Parse("127.0.0.3")), new NameServer(IPAddress.Parse("127.0.0.4")), new NameServer(IPAddress.Parse("127.0.0.5")), new NameServer(IPAddress.Parse("127.0.0.6")), new NameServer(IPAddress.Parse("127.0.0.7"))) { EnableAuditTrail = true, ContinueOnDnsError = true }; var calledIps = new List <IPAddress>(); var messageHandler = new TestMessageHandler((ip, req) => { calledIps.Add(ip.Address); return(new DnsResponseMessage( new DnsResponseHeader(1, (int)DnsResponseCode.NotExistentDomain, 0, 0, 0, 0), 0)); }); var request = new DnsRequestMessage( new DnsRequestHeader(0, DnsOpCode.Query), new DnsQuestion("test.com", QueryType.A, QueryClass.IN)); var result = await lookup.ResolveQueryAsync(lookup.GetNextServers(), messageHandler, request, false); // no exception but error in the response after calling all 3 endpoints! Assert.True(result.HasError); Assert.Equal(DnsResponseCode.NotExistentDomain, result.Header.ResponseCode); // ensure the client tried all the configured endpoints Assert.Equal(7, calledIps.Count); }
public void Lookup_PreserveNameServerOrder() { var lookup = new LookupClient( new NameServer(IPAddress.Parse("127.0.0.1")), new NameServer(IPAddress.Parse("127.0.0.2")), new NameServer(IPAddress.Parse("127.0.0.3"))) { // default is true UseRandomNameServer = false }; var calledIps = new List <IPAddress>(); var messageHandler = new TestMessageHandler((ip, req) => { calledIps.Add(ip.Address); return(new DnsResponseMessage( new DnsResponseHeader(1, (int)DnsResponseCode.NoError, 0, 0, 0, 0), 0)); }); // calling multiple times will always use the first server when it returns NoError. // No other servers should be called for (var i = 0; i < 3; i++) { var request = new DnsRequestMessage( new DnsRequestHeader(i, DnsOpCode.Query), new DnsQuestion("test.com", QueryType.A, QueryClass.IN)); var result = lookup.ResolveQuery(lookup.GetNextServers(), messageHandler, request, false); Assert.False(result.HasError); } Assert.Equal(3, calledIps.Count); Assert.Equal(IPAddress.Parse("127.0.0.1"), calledIps[0]); Assert.Equal(IPAddress.Parse("127.0.0.1"), calledIps[1]); Assert.Equal(IPAddress.Parse("127.0.0.1"), calledIps[2]); }
/// <summary> /// 通过数据转换 /// </summary> /// <param name="message"></param> /// <returns></returns> public DnsClientRequest FromArray(byte[] message) { DnsRequestMessage request = DnsRequestMessage.FromArray(message); return(new DnsClientRequest(_coder, request)); }
public DnsResponseMessage Resolve(IPEndPoint server, string domainNameToResolve) { DnsRequestMessage request = messageProcessor.ProcessRequest(domainNameToResolve); return(Resolve(server, request)); }
public override Task <DnsResponseMessage> QueryAsync(IPEndPoint endpoint, DnsRequestMessage request, CancellationToken cancellationToken, Action <Action> cancelationCallback) { return(Task.FromResult(_onQuery(endpoint, request))); }
public override DnsResponseMessage Query(IPEndPoint endpoint, DnsRequestMessage request, TimeSpan timeout) { return(_onQuery(endpoint, request)); }