diff --git a/misc/Ae.Dns.Console/Startup.cs b/misc/Ae.Dns.Console/Startup.cs index 9a26f77..408d16d 100644 --- a/misc/Ae.Dns.Console/Startup.cs +++ b/misc/Ae.Dns.Console/Startup.cs @@ -160,6 +160,8 @@ async Task GroupToTable(IEnumerable> groups, params if (context.Request.Path == "/") { + var dnsClient = context.RequestServices.GetRequiredService(); + context.Response.StatusCode = StatusCodes.Status200OK; context.Response.ContentType = "text/html; charset=utf-8"; @@ -214,6 +216,12 @@ string CreateQueryStringWithout(string name) var filteredQueries = query.ToArray(); + var reverseLookups = (await Task.WhenAll(filteredQueries.Where(x => x.Sender != null).Select(x => x.Sender).Distinct().Select(async x => + { + var answer = await dnsClient.Query(DnsQueryFactory.CreateReverseQuery(x)); + return (x, answer.Answers.FirstOrDefault()?.Resource.ToString()); + }))).ToDictionary(x => x.x, x => x.Item2); + await context.Response.WriteAsync($"

Metrics Server

"); await context.Response.WriteAsync($"

Earliest tracked query was {filteredQueries.Select(x => x.Created).LastOrDefault()} (current time is {DateTime.UtcNow}).

"); await context.Response.WriteAsync($"

There are {resolverCache.Count()} cache entries. {filteredQueries.Count(x => x.Answer == null)} queries were not answered.

"); @@ -231,7 +239,7 @@ string CreateQueryStringWithout(string name) string SenderFilter(DnsQuery dnsQuery) { - return $"{dnsQuery.Sender}"; + return $"{reverseLookups[dnsQuery.Sender] ?? dnsQuery.Sender.ToString()}"; } string ResponseFilter(DnsQuery dnsQuery) @@ -356,20 +364,22 @@ static TObject GetObjectFromTags(ReadOnlySpan(tags, "Query"); var answer = GetObjectFromTags(tags, "Answer"); var elapsed = GetObjectFromTags(tags, "Elapsed"); - var sender = query.Header.Tags.TryGetValue("Sender", out var rawEndpoint) && rawEndpoint is IPEndPoint endpoint ? endpoint : throw new Exception(); - - _queries.Enqueue(new DnsQuery + var sender = query.Header.Tags.TryGetValue("Sender", out var rawEndpoint) && rawEndpoint is not null && rawEndpoint is IPEndPoint endpoint ? endpoint.Address : null; + if (sender != null) { - Query = new DnsHeaderLight(query.Header), - Answer = new DnsHeaderLight(answer?.Header), - Sender = sender.Address, - Elapsed = elapsed, - Created = DateTime.UtcNow - }); - - if (_queries.Count > 100_000) - { - _queries.TryDequeue(out DnsQuery _); + _queries.Enqueue(new DnsQuery + { + Query = new DnsHeaderLight(query.Header), + Answer = new DnsHeaderLight(answer?.Header), + Sender = sender, + Elapsed = elapsed, + Created = DateTime.UtcNow + }); + + if (_queries.Count > 100_000) + { + _queries.TryDequeue(out DnsQuery _); + } } } } diff --git a/src/Ae.Dns.Client/Lookup/DnsStaticLookupClient.cs b/src/Ae.Dns.Client/Lookup/DnsStaticLookupClient.cs index 8c6a054..2d469f4 100644 --- a/src/Ae.Dns.Client/Lookup/DnsStaticLookupClient.cs +++ b/src/Ae.Dns.Client/Lookup/DnsStaticLookupClient.cs @@ -99,7 +99,7 @@ private DnsMessage ReturnPointer(DnsMessage query, IEnumerable foundHost { Class = DnsQueryClass.IN, Host = query.Header.Host, - Resource = new DnsTextResource { Entries = foundHost.Split('.') }, + Resource = new DnsDomainResource { Entries = foundHost.Split('.') }, Type = DnsQueryType.PTR, TimeToLive = 3600 }).ToList()