Skip to content

Commit 3146f48

Browse files
committed
Feature: DNS Lookup - Support for DNSKEY & SRV added
1 parent fed3392 commit 3146f48

File tree

3 files changed

+65
-32
lines changed

3 files changed

+65
-32
lines changed

Source/NETworkManager.Models/Network/DNSLookup.cs

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
using System;
1+
using DnsClient;
2+
using DnsClient.Protocol;
3+
using System;
24
using System.Collections.Generic;
5+
using System.Diagnostics;
36
using System.Linq;
47
using System.Net;
58
using System.Net.NetworkInformation;
69
using System.Threading.Tasks;
7-
using DnsClient;
8-
using DnsClient.Protocol;
910

1011
namespace NETworkManager.Models.Network;
1112

@@ -213,57 +214,73 @@ private void ProcessDnsAnswers(IEnumerable<DnsResourceRecord> answers, NameServe
213214
if (answers is not DnsResourceRecord[] dnsResourceRecords)
214215
return;
215216

217+
Debug.WriteLine(dnsResourceRecords);
218+
216219
// A
217-
foreach (var record in dnsResourceRecords.ARecords())
220+
foreach (var record in dnsResourceRecords.OfType<ARecord>())
218221
OnRecordReceived(new DNSLookupRecordReceivedArgs(
219222
new DNSLookupRecordInfo(
220223
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
221224
$"{record.Address}", $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
222225

223226
// AAAA
224-
foreach (var record in dnsResourceRecords.AaaaRecords())
227+
foreach (var record in dnsResourceRecords.OfType<AaaaRecord>())
225228
OnRecordReceived(new DNSLookupRecordReceivedArgs(
226229
new DNSLookupRecordInfo(
227230
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
228231
$"{record.Address}", $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
229232

230233
// CNAME
231-
foreach (var record in dnsResourceRecords.CnameRecords())
234+
foreach (var record in dnsResourceRecords.OfType<CNameRecord>())
232235
OnRecordReceived(new DNSLookupRecordReceivedArgs(
233236
new DNSLookupRecordInfo(
234237
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
235238
record.CanonicalName, $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
236239

240+
// DNSKEY
241+
foreach (var record in dnsResourceRecords.OfType<DnsKeyRecord>())
242+
OnRecordReceived(new DNSLookupRecordReceivedArgs(
243+
new DNSLookupRecordInfo(
244+
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
245+
$"{record.Flags} {record.Protocol} {record.Algorithm} {Convert.ToBase64String(record.PublicKey.ToArray())}", $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
246+
237247
// MX
238-
foreach (var record in dnsResourceRecords.MxRecords())
248+
foreach (var record in dnsResourceRecords.OfType<MxRecord>())
239249
OnRecordReceived(new DNSLookupRecordReceivedArgs(
240250
new DNSLookupRecordInfo(
241251
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
242252
record.Exchange, $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
243253

244254
// NS
245-
foreach (var record in dnsResourceRecords.NsRecords())
255+
foreach (var record in dnsResourceRecords.OfType<NsRecord>())
246256
OnRecordReceived(new DNSLookupRecordReceivedArgs(
247257
new DNSLookupRecordInfo(
248258
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
249259
record.NSDName, $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
250260

251261
// PTR
252-
foreach (var record in dnsResourceRecords.PtrRecords())
262+
foreach (var record in dnsResourceRecords.OfType<PtrRecord>())
253263
OnRecordReceived(new DNSLookupRecordReceivedArgs(
254264
new DNSLookupRecordInfo(
255265
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
256266
record.PtrDomainName, $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
257267

258268
// SOA
259-
foreach (var record in dnsResourceRecords.SoaRecords())
269+
foreach (var record in dnsResourceRecords.OfType<SoaRecord>())
260270
OnRecordReceived(new DNSLookupRecordReceivedArgs(
261271
new DNSLookupRecordInfo(
262272
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
263273
record.MName + ", " + record.RName, $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
264274

275+
// SRV
276+
foreach (var record in dnsResourceRecords.OfType<SrvRecord>())
277+
OnRecordReceived(new DNSLookupRecordReceivedArgs(
278+
new DNSLookupRecordInfo(
279+
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",
280+
$"{record.Priority} {record.Weight} {record.Port} {record.Target}", $"{nameServer.Address}", nameServerHostname, nameServer.Port)));
281+
265282
// TXT
266-
foreach (var record in dnsResourceRecords.TxtRecords())
283+
foreach (var record in dnsResourceRecords.OfType<TxtRecord>())
267284
OnRecordReceived(new DNSLookupRecordReceivedArgs(
268285
new DNSLookupRecordInfo(
269286
record.DomainName, record.TimeToLive, $"{record.RecordClass}", $"{record.RecordType}",

Source/NETworkManager.Settings/GlobalStaticConfiguration.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using NETworkManager.Models.RemoteDesktop;
99
using NETworkManager.Utilities;
1010
using System;
11+
using System.Collections.Generic;
1112
using System.IO;
1213
using System.Linq;
1314

@@ -140,6 +141,20 @@ public static class GlobalStaticConfiguration
140141
// Application: DNS Lookup
141142
public static QueryClass DNSLookup_QueryClass => QueryClass.IN;
142143
public static QueryType DNSLookup_QueryType => QueryType.ANY;
144+
public static HashSet<QueryType> DNSLookup_CustomQueryTypes =>
145+
[
146+
QueryType.A,
147+
QueryType.AAAA,
148+
QueryType.ANY,
149+
QueryType.CNAME,
150+
QueryType.DNSKEY,
151+
QueryType.MX,
152+
QueryType.NS,
153+
QueryType.PTR,
154+
QueryType.SOA,
155+
QueryType.SRV,
156+
QueryType.TXT
157+
];
143158
public static bool DNSLookup_UseTCPOnly => false;
144159
public static int DNSLookup_Retries => 3;
145160
public static int DNSLookup_Timeout => 2;

Source/NETworkManager/ViewModels/DNSLookupViewModel.cs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,4 @@
1-
using System;
2-
using System.Collections;
3-
using System.Collections.Generic;
4-
using System.Collections.ObjectModel;
5-
using System.ComponentModel;
6-
using System.Linq;
7-
using System.Threading.Tasks;
8-
using System.Windows;
9-
using System.Windows.Data;
10-
using System.Windows.Input;
11-
using System.Windows.Threading;
12-
using DnsClient;
1+
using DnsClient;
132
using log4net;
143
using MahApps.Metro.Controls;
154
using MahApps.Metro.Controls.Dialogs;
@@ -20,6 +9,17 @@
209
using NETworkManager.Settings;
2110
using NETworkManager.Utilities;
2211
using NETworkManager.Views;
12+
using System;
13+
using System.Collections;
14+
using System.Collections.Generic;
15+
using System.Collections.ObjectModel;
16+
using System.ComponentModel;
17+
using System.Linq;
18+
using System.Threading.Tasks;
19+
using System.Windows;
20+
using System.Windows.Data;
21+
using System.Windows.Input;
22+
using System.Windows.Threading;
2323

2424
namespace NETworkManager.ViewModels;
2525

@@ -254,17 +254,18 @@ private void LoadSettings()
254254

255255
private void LoadTypes()
256256
{
257-
// Filter by common types...
258-
QueryTypes = SettingsManager.Current.DNSLookup_ShowOnlyMostCommonQueryTypes
259-
? Enum.GetValues(typeof(QueryType)).Cast<QueryType>().Where(x =>
260-
x is QueryType.A or QueryType.AAAA or QueryType.ANY or QueryType.CNAME or QueryType.MX or QueryType.NS
261-
or QueryType.PTR or QueryType.SOA or QueryType.TXT).OrderBy(x => x.ToString()).ToList()
262-
: Enum.GetValues(typeof(QueryType)).Cast<QueryType>().OrderBy(x => x.ToString()).ToList();
257+
var queryTypes = (QueryType[])Enum.GetValues(typeof(QueryType));
258+
259+
if (SettingsManager.Current.DNSLookup_ShowOnlyMostCommonQueryTypes)
260+
QueryTypes = [.. queryTypes.Where(GlobalStaticConfiguration.DNSLookup_CustomQueryTypes.Contains).OrderBy(x => x.ToString())];
261+
else
262+
QueryTypes = [.. queryTypes.OrderBy(x => x.ToString())];
263+
263264
QueryType = QueryTypes.FirstOrDefault(x => x == SettingsManager.Current.DNSLookup_QueryType);
264265

265266
// Fallback
266267
if (QueryType == 0)
267-
QueryType = QueryType.ANY;
268+
QueryType = GlobalStaticConfiguration.DNSLookup_QueryType;
268269
}
269270

270271
#endregion
@@ -337,7 +338,7 @@ private void Query()
337338
dnsLookup.LookupError += DNSLookup_LookupError;
338339
dnsLookup.LookupComplete += DNSLookup_LookupComplete;
339340

340-
dnsLookup.ResolveAsync(Host.Split(';').Select(x => x.Trim()).ToList());
341+
dnsLookup.ResolveAsync([.. Host.Split(';').Select(x => x.Trim())]);
341342
}
342343

343344
public void OnClose()
@@ -391,7 +392,7 @@ private async Task Export()
391392
catch (Exception ex)
392393
{
393394
Log.Error("Error while exporting data as " + instance.FileType, ex);
394-
395+
395396
var settings = AppearanceManager.MetroDialog;
396397
settings.AffirmativeButtonText = Strings.OK;
397398

0 commit comments

Comments
 (0)