Skip to content

Commit fdccad5

Browse files
committed
DNS Lookup implemented
1 parent 7ee4902 commit fdccad5

14 files changed

Lines changed: 202 additions & 77 deletions

File tree

Source/NETworkManager/3rdParty/Heijden.DNS/Resolver.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ private Response UdpRequest(Request request)
353353
else
354354
socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
355355

356-
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, m_Timeout * 1000);
356+
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, m_Timeout);
357357

358358
try
359359
{
@@ -403,7 +403,7 @@ private Response TcpRequest(Request request)
403403
else
404404
tcpClient = new TcpClient(AddressFamily.InterNetworkV6);
405405

406-
tcpClient.ReceiveTimeout = m_Timeout * 1000;
406+
tcpClient.ReceiveTimeout = m_Timeout;
407407

408408
try
409409
{

Source/NETworkManager/Models/Network/DNSLookup.cs

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
using Heijden.DNS;
2-
using NETworkManager.Helpers;
32
using System;
4-
using System.Linq;
53
using System.Net;
6-
using System.Net.NetworkInformation;
7-
using System.Net.Sockets;
8-
using System.Threading;
94
using System.Threading.Tasks;
105
using System.Windows;
116

@@ -18,12 +13,19 @@ public class DNSLookup
1813
#endregion
1914

2015
#region Events
21-
/* public event EventHandler<IPScannerHostFoundArgs> RecordReceived;
16+
public event EventHandler<DNSLookupRecordArgs> RecordReceived;
2217

23-
protected virtual void OnRecordReceived(IPScannerHostFoundArgs e)
24-
{
25-
RecordReceived?.Invoke(this, e);
26-
} */
18+
protected virtual void OnRecordReceived(DNSLookupRecordArgs e)
19+
{
20+
RecordReceived?.Invoke(this, e);
21+
}
22+
23+
public event EventHandler<DNSLookupErrorArgs> LookupError;
24+
25+
protected virtual void OnLookupError(DNSLookupErrorArgs e)
26+
{
27+
LookupError?.Invoke(this, e);
28+
}
2729

2830
public event EventHandler LookupComplete;
2931

@@ -34,49 +36,69 @@ protected virtual void OnLookupComplete()
3436
#endregion
3537

3638
#region Methods
37-
public void LookupAsync(string hostnameOrIPAddress)
39+
public void LookupAsync(string hostnameOrIPAddress, DNSLookupOptions dnsLookupOptions)
3840
{
3941
Task.Run(() =>
4042
{
41-
dnsResolver.DnsServer = "2001:4860:4860::8888";
42-
dnsResolver.TransportType = Heijden.DNS.TransportType.Udp;
43-
dnsResolver.Recursion = true;
44-
dnsResolver.TransportType = Heijden.DNS.TransportType.Tcp;
45-
Response dnsResponse = dnsResolver.Query(hostnameOrIPAddress, QType.ANY, QClass.IN);
43+
// This will convert the query to an Arpa request
44+
if (dnsLookupOptions.Type == QType.PTR)
45+
{
46+
IPAddress ip;
47+
if (IPAddress.TryParse(hostnameOrIPAddress, out ip))
48+
hostnameOrIPAddress = Resolver.GetArpaFromIp(ip);
49+
}
4650

47-
if (!string.IsNullOrEmpty(dnsResponse.Error))
48-
MessageBox.Show(dnsResponse.Error);
51+
if (dnsLookupOptions.Type == QType.NAPTR)
52+
hostnameOrIPAddress = Resolver.GetArpaFromEnum(hostnameOrIPAddress);
4953

50-
foreach (RecordA r in dnsResponse.RecordsA)
54+
if (dnsLookupOptions.UseCustomDNSServer)
55+
dnsResolver.DnsServer = dnsLookupOptions.CustomDNSServer;
56+
57+
dnsResolver.Recursion = dnsLookupOptions.Recursion;
58+
dnsResolver.TransportType = dnsLookupOptions.TransportType;
59+
dnsResolver.Retries = dnsLookupOptions.Attempts;
60+
dnsResolver.TimeOut = dnsLookupOptions.Timeout;
61+
62+
Response dnsResponse = dnsResolver.Query(hostnameOrIPAddress, dnsLookupOptions.Type, dnsLookupOptions.Class);
63+
64+
// If there was an error... return
65+
if (!string.IsNullOrEmpty(dnsResponse.Error))
5166
{
52-
MessageBox.Show(r.Address.ToString());
67+
OnLookupError(new DNSLookupErrorArgs(dnsResponse.Error));
68+
return;
5369
}
5470

71+
// A
72+
foreach (RecordA r in dnsResponse.RecordsA)
73+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
74+
75+
// AAAA
5576
foreach (RecordAAAA r in dnsResponse.RecordsAAAA)
56-
{
57-
MessageBox.Show(r.Address.ToString());
58-
}
77+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
5978

79+
// CNAME
6080
foreach (RecordCNAME r in dnsResponse.RecordsCNAME)
61-
{
62-
MessageBox.Show(r.CNAME);
63-
}
64-
65-
foreach (RecordPTR r in dnsResponse.RecordsPTR)
66-
{
67-
MessageBox.Show(r.PTRDNAME);
68-
}
81+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
6982

83+
// MX
7084
foreach (RecordMX r in dnsResponse.RecordsMX)
71-
{
72-
MessageBox.Show(r.EXCHANGE);
73-
}
85+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
7486

87+
// NS
7588
foreach (RecordNS r in dnsResponse.RecordsNS)
76-
{
77-
MessageBox.Show(r.NSDNAME);
89+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
7890

79-
}
91+
// PTR
92+
foreach (RecordPTR r in dnsResponse.RecordsPTR)
93+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
94+
95+
// SOA
96+
foreach (RecordSOA r in dnsResponse.RecordsSOA)
97+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
98+
99+
// TXT
100+
foreach (RecordTXT r in dnsResponse.RecordsTXT)
101+
OnRecordReceived(new DNSLookupRecordArgs(r.RR, r.ToString()));
80102

81103
OnLookupComplete();
82104
});
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace NETworkManager.Models.Network
2+
{
3+
public class DNSLookupErrorArgs : System.EventArgs
4+
{
5+
public string Error { get; set; }
6+
7+
public DNSLookupErrorArgs()
8+
{
9+
10+
}
11+
12+
public DNSLookupErrorArgs(string error)
13+
{
14+
Error = error;
15+
}
16+
}
17+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Heijden.DNS;
2+
3+
namespace NETworkManager.Models.Network
4+
{
5+
public class DNSLookupOptions
6+
{
7+
public bool UseCustomDNSServer { get; set; }
8+
public string CustomDNSServer { get; set; }
9+
public QClass Class { get; set; }
10+
public QType Type { get; set; }
11+
public bool Recursion { get; set; }
12+
public bool UseResolverCache { get; set; }
13+
public TransportType TransportType { get; set; }
14+
public int Attempts { get; set; }
15+
public int Timeout { get; set;}
16+
17+
public DNSLookupOptions()
18+
{
19+
20+
}
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using Heijden.DNS;
2+
3+
namespace NETworkManager.Models.Network
4+
{
5+
public class DNSLookupRecordArgs : System.EventArgs
6+
{
7+
public RR ResourceRecord { get; set; }
8+
public string Result { get; set; }
9+
10+
public DNSLookupRecordArgs()
11+
{
12+
13+
}
14+
15+
public DNSLookupRecordArgs(RR resourceRecord, object result)
16+
{
17+
ResourceRecord = resourceRecord;
18+
Result = result.ToString();
19+
}
20+
}
21+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using Heijden.DNS;
2+
3+
namespace NETworkManager.Models.Network
4+
{
5+
public class DNSLookupRecordInfo
6+
{
7+
public string Name { get; set; }
8+
public uint TTL { get; set; }
9+
public string Class { get; set; }
10+
public string Type { get; set; }
11+
public string Result { get; set; }
12+
13+
public DNSLookupRecordInfo()
14+
{
15+
16+
}
17+
18+
public DNSLookupRecordInfo(RR resourceRecord, string result)
19+
{
20+
Name = resourceRecord.NAME;
21+
TTL = resourceRecord.TTL;
22+
Class = resourceRecord.Class.ToString();
23+
Type = resourceRecord.Type.ToString();
24+
Result = result;
25+
}
26+
27+
public static DNSLookupRecordInfo Parse(DNSLookupRecordArgs e)
28+
{
29+
return new DNSLookupRecordInfo(e.ResourceRecord, e.Result);
30+
}
31+
}
32+
}

Source/NETworkManager/Models/Network/IPScannerOptions.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,5 @@ public IPScannerOptions()
1313
{
1414

1515
}
16-
17-
public IPScannerOptions(int threads, int timeout, byte[] buffer, int attempts, bool resolveHostname, bool resolveMACAddress)
18-
{
19-
Threads = threads;
20-
Timeout = timeout;
21-
Buffer = buffer;
22-
Attempts = attempts;
23-
ResolveHostname = resolveHostname;
24-
ResolveMACAddress = resolveMACAddress;
25-
}
2616
}
2717
}

Source/NETworkManager/NETworkManager.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@
164164
<Compile Include="3rdParty\Heijden.DNS\Structs.cs" />
165165
<Compile Include="Converters\NullableDateTimeToStringConverter.cs" />
166166
<Compile Include="Models\Network\DNSLookup.cs" />
167+
<Compile Include="Models\Network\DNSLookupOptions.cs" />
168+
<Compile Include="Models\Network\DNSLookupErrorArgs.cs" />
169+
<Compile Include="Models\Network\DNSLookupRecordInfo.cs" />
170+
<Compile Include="Models\Network\DNSLookupRecordArgs.cs" />
167171
<Compile Include="Validators\IPAddressValidator.cs" />
168172
<Compile Include="Validators\OpacityTextboxValidator.cs" />
169173
<Compile Include="ViewModels\Applications\DNSLookupViewModel.cs" />

Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,8 @@
210210
<system:String x:Key="String_Class">Klasse</system:String>
211211
<system:String x:Key="String_Recursion">Rekursion</system:String>
212212
<system:String x:Key="String_UseResolverCache">Resolver-Cache verwenden</system:String>
213-
213+
<system:String x:Key="String_Result">Ergebnis</system:String>
214+
214215
<!-- Buttons -->
215216
<system:String x:Key="String_Button_Change">Wechseln</system:String>
216217
<system:String x:Key="String_Button_Default">Standard</system:String>

Source/NETworkManager/Resources/Localization/Resources.en-US.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
<system:String x:Key="String_Header_Confirm">Confirm</system:String>
4444
<system:String x:Key="String_Header_HotKeys">HotKeys</system:String>
4545
<system:String x:Key="String_Header_DNSLookup">DNS Lookup</system:String>
46-
<system:String x:Key="String_Button_Lookup">Lookup</system:String>
4746
<system:String x:Key="String_Header_Route">Route</system:String>
4847
<system:String x:Key="String_Header_MaximumHopsReached">Maximum hops reached</system:String>
4948
<system:String x:Key="String_Header_CanceledByUser">Canceled by user</system:String>
@@ -213,6 +212,7 @@
213212
<system:String x:Key="String_Class">Class</system:String>
214213
<system:String x:Key="String_Recursion">Recursion</system:String>
215214
<system:String x:Key="String_UseResolverCache">Use resolver cache</system:String>
215+
<system:String x:Key="String_Result">Result</system:String>
216216

217217
<!-- Buttons -->
218218
<system:String x:Key="String_Button_Change">Change</system:String>
@@ -238,6 +238,7 @@
238238
<system:String x:Key="String_Button_Reset">Reset</system:String>
239239
<system:String x:Key="String_Button_Continue">Continue</system:String>
240240
<system:String x:Key="String_Button_Validate">Validate</system:String>
241+
<system:String x:Key="String_Button_Lookup">Lookup</system:String>
241242

242243
<!-- ContextMenuItem.Header -->
243244
<system:String x:Key="String_ContextMenu_Cut">Cut</system:String>

0 commit comments

Comments
 (0)