diff --git a/EonaCat.DnsTester/App.config b/EonaCat.DnsTester/App.config
index 4bfa005..4516d50 100644
--- a/EonaCat.DnsTester/App.config
+++ b/EonaCat.DnsTester/App.config
@@ -1,6 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/EonaCat.DnsTester/EonaCat.DnsTester.csproj b/EonaCat.DnsTester/EonaCat.DnsTester.csproj
index 85bf5a6..10634cc 100644
--- a/EonaCat.DnsTester/EonaCat.DnsTester.csproj
+++ b/EonaCat.DnsTester/EonaCat.DnsTester.csproj
@@ -14,4 +14,19 @@
+
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
\ No newline at end of file
diff --git a/EonaCat.DnsTester/Helpers/DnsHelper.cs b/EonaCat.DnsTester/Helpers/DnsHelper.cs
index 5d5cbe7..9a337ed 100644
--- a/EonaCat.DnsTester/Helpers/DnsHelper.cs
+++ b/EonaCat.DnsTester/Helpers/DnsHelper.cs
@@ -1,118 +1,400 @@
-using Microsoft.VisualBasic.Logging;
-using System;
+using System;
using System.Collections.Generic;
-using System.Linq;
+using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
-using System.Windows.Forms;
namespace EonaCat.DnsTester.Helpers
{
- internal class DnsHelper
+ class DnsHelper
{
- public static event EventHandler Log;
-
- public static void ProcessDns(string startOfUrl, string domain, int urlsTotal, Socket dnsSocket, byte[] bytesSend,
- long startTime, int totalDnsToUse, ListView result)
+ public static event EventHandler OnLog;
+ public static async Task SendDnsQueryPacket(string dnsId, string server, int port, byte[] queryBytes)
{
- var bytesReceived = new byte[512];
- var totalReceived = 0;
+ // Start the clock
+ var startTime = DateTime.Now.Ticks;
- // wait for a response up to timeout
- while (totalReceived < urlsTotal * totalDnsToUse)
+ var endPoint = new IPEndPoint(IPAddress.Parse(server), port);
+ using (var client = new UdpClient(endPoint.AddressFamily))
{
- dnsSocket.Receive(bytesReceived);
-
- // Check if the error is ours
- if ((bytesReceived[0] != bytesSend[0] || bytesReceived[1] != 0x31) &&
- bytesReceived[1] != 0x32)
- continue;
-
- if (bytesReceived[2] != 0x81 || bytesReceived[3] != 0x80) continue;
-
- // Get the time now
- var stopTime = DateTime.Now.Ticks;
- var deltaTime = Convert.ToString((double)(stopTime - startTime) / 10000000);
-
- // Decode the answers
- // Find the URL that was returned
- int dnsId = bytesReceived[1];
- var receiveString = Encoding.ASCII.GetString(bytesReceived);
- var index = 12;
- int startOfUrlLength = bytesReceived[index];
- index++;
- startOfUrl = receiveString.Substring(index, startOfUrlLength);
- index += startOfUrlLength;
- int domainLength = bytesReceived[index];
- index++;
- domain = receiveString.Substring(index, domainLength);
- index += domainLength;
- index += 8;
-
- // Get the record type
- int ResponseType = bytesReceived[index];
- index += 9;
-
- // Get the IP address if applicable
- var ipResponse = "";
- switch (ResponseType)
- {
- case 1:
- ipResponse =
- $"{Convert.ToString(bytesReceived[index])}.{Convert.ToString(bytesReceived[index + 1])}.{Convert.ToString(bytesReceived[index + 2])}.{Convert.ToString(bytesReceived[index + 3])}";
- break;
- case 5:
- ipResponse = "CNAME";
- break;
- case 6:
- ipResponse = "SOA";
- break;
- }
-
- SetStatus($"Answer: {startOfUrl}.{domain} : {ipResponse}");
-
- // Find the url in the list
- for (int i = 0; i < result.Items.Count; i++)
- {
- if (result.Items[i].Text != $"{startOfUrl}.{domain}") continue;
-
- string sDeltaTime;
- switch (dnsId)
- {
- case 49:
- result.Items[i].SubItems[1].Text = Convert.ToString(ipResponse);
- sDeltaTime = Convert.ToString(deltaTime);
- result.Items[i].SubItems[2].Text =
- sDeltaTime.Length > 5 ? sDeltaTime.Substring(0, 5) : sDeltaTime;
- result.Items[i].ForeColor = System.Drawing.Color.Red;
- result.EnsureVisible(i);
- result.Update();
- Application.DoEvents();
- result.Items[i].ForeColor = System.Drawing.Color.Black;
- break;
-
- case 50:
- result.Items[i].SubItems[3].Text = Convert.ToString(ipResponse);
- sDeltaTime = Convert.ToString(deltaTime);
- result.Items[i].SubItems[4].Text =
- sDeltaTime.Length > 5 ? sDeltaTime.Substring(0, 5) : sDeltaTime;
- result.Items[i].ForeColor = System.Drawing.Color.Red;
- result.EnsureVisible(i);
- result.Update();
- Application.DoEvents();
- result.Items[i].ForeColor = System.Drawing.Color.Black;
- break;
- }
-
- totalReceived++;
- }
+ client.DontFragment = true;
+ client.EnableBroadcast = false;
+ client.Client.ReceiveTimeout = DnsReceiveTimeout;
+ await client.SendAsync(queryBytes, queryBytes.Length, endPoint);
+ var responseResult = await client.ReceiveAsync();
+ DnsResponse response = ParseDnsResponsePacket(dnsId, startTime, server, responseResult.Buffer);
+ return response;
}
}
- private static void SetStatus(string text)
+ public static int DnsReceiveTimeout { get; set; } = 5;
+
+
+ public static byte[] CreateDnsQueryPacket(string domainName, DnsRecordType recordType)
{
- Log?.Invoke(null, text);
+ Random random = new Random();
+
+ // DNS header
+ ushort id = (ushort)random.Next(0, 65536);
+ ushort flags = (ushort)0x0100; // recursion desired
+ ushort qdcount = 1;
+ ushort ancount = 0;
+ ushort nscount = 0;
+ ushort arcount = 0;
+ byte[] headerBytes = new byte[]
+ {
+ (byte)(id >> 8), (byte)(id & 0xff),
+ (byte)(flags >> 8), (byte)(flags & 0xff),
+ (byte)(qdcount >> 8), (byte)(qdcount & 0xff),
+ (byte)(ancount >> 8), (byte)(ancount & 0xff),
+ (byte)(nscount >> 8), (byte)(nscount & 0xff),
+ (byte)(arcount >> 8), (byte)(arcount & 0xff),
+ };
+
+ // DNS question
+ string[] labels = domainName.Split('.');
+ byte[] qnameBytes = new byte[domainName.Length + 2];
+ int qnameIndex = 0;
+ foreach (string label in labels)
+ {
+ qnameBytes[qnameIndex++] = (byte)label.Length;
+ foreach (char c in label)
+ {
+ qnameBytes[qnameIndex++] = (byte)c;
+ }
+ }
+ qnameBytes[qnameIndex++] = 0;
+
+ byte[] qtypeBytes = new byte[] { (byte)((ushort)recordType >> 8), (byte)((ushort)recordType & 0xff) };
+ byte[] qclassBytes = new byte[] { 0, 1 }; // internet class
+ byte[] questionBytes = new byte[qnameBytes.Length + qtypeBytes.Length + qclassBytes.Length];
+ qnameBytes.CopyTo(questionBytes, 0);
+ qtypeBytes.CopyTo(questionBytes, qnameBytes.Length);
+ qclassBytes.CopyTo(questionBytes, qnameBytes.Length + qtypeBytes.Length);
+
+ // Combine the header and question to form the DNS query packet
+ byte[] queryBytes = new byte[headerBytes.Length + questionBytes.Length];
+ headerBytes.CopyTo(queryBytes, 0);
+ questionBytes.CopyTo(queryBytes, headerBytes.Length);
+
+ return queryBytes;
}
+
+ static DnsQuestion ParseDnsQuestionRecord(byte[] queryBytes, ref int offset)
+ {
+ // Parse the DNS name
+ string name = ParseDnsName(queryBytes, ref offset);
+ if (name == null)
+ {
+ return null;
+ }
+
+ // Parse the DNS type and class
+ ushort type = (ushort)((queryBytes[offset] << 8) | queryBytes[offset + 1]);
+ ushort qclass = (ushort)((queryBytes[offset + 2] << 8) | queryBytes[offset + 3]);
+ offset += 4;
+
+ return new DnsQuestion
+ {
+ Name = name,
+ Type = (DnsRecordType)type,
+ Class = (DnsRecordClass)qclass,
+ };
+ }
+
+ static DnsResponse ParseDnsResponsePacket(string dnsId, long startTime, string server, byte[] responseBytes)
+ {
+ // Parse the DNS header
+ ushort id = (ushort)((responseBytes[0] << 8) | responseBytes[1]);
+ ushort flags = (ushort)((responseBytes[2] << 8) | responseBytes[3]);
+ ushort qdcount = (ushort)((responseBytes[4] << 8) | responseBytes[5]);
+ ushort ancount = (ushort)((responseBytes[6] << 8) | responseBytes[7]);
+ ushort nscount = (ushort)((responseBytes[8] << 8) | responseBytes[9]);
+ ushort arcount = (ushort)((responseBytes[10] << 8) | responseBytes[11]);
+
+ List questions = new List();
+
+ //for (int i = 0; i < qdcount; i++)
+ //{
+ // DnsQuestion question = ParseDnsQuestionRecord(responseBytes, ref offset);
+ // if (question != null)
+ // {
+ // questions.Add(question);
+ // }
+ //}
+
+ int offset = 12;
+
+ // Parse the DNS answer records
+ List answers = new List();
+ for (int i = 0; i < ancount; i++)
+ {
+ try
+ {
+ ResourceRecord answer = ParseDnsAnswerRecord(responseBytes, ref offset);
+ if (answer != null)
+ {
+ answers.Add(answer);
+ }
+ }
+ catch (Exception exception)
+ {
+ OnLog?.Invoke(null, $"Answer exception: " + exception.Message);
+ }
+ }
+
+ // Parse the DNS authority records
+ List authorities = new List();
+ for (int i = 0; i < nscount; i++)
+ {
+ try
+ {
+ ResourceRecord authority = ParseDnsAnswerRecord(responseBytes, ref offset);
+ if (authority != null)
+ {
+ authorities.Add(authority);
+ }
+ }
+ catch (Exception exception)
+ {
+ OnLog?.Invoke(null, $"Authority answer exception: " + exception.Message);
+ }
+ }
+
+ // Parse the DNS additional records
+ List additionals = new List();
+ for (int i = 0; i < arcount; i++)
+ {
+ try
+ {
+ ResourceRecord additional = ParseDnsAnswerRecord(responseBytes, ref offset);
+ if (additional != null)
+ {
+ additionals.Add(additional);
+ }
+ }
+ catch (Exception exception)
+ {
+ OnLog?.Invoke(null, $"Additional answer exception: " + exception.Message);
+ }
+ }
+
+ return new DnsResponse
+ {
+ Id = id,
+ StartTime = startTime,
+ Resolver = server,
+ Flags = flags,
+ Class = (DnsRecordClass)((flags >> 3) & 0x0f),
+ DnsId = dnsId,
+ Questions = questions,
+ Answers = answers,
+ Authorities = authorities,
+ Additionals = additionals,
+ };
+ }
+
+ static ResourceRecord ParseDnsAnswerRecord(byte[] responseBytes, ref int offset)
+ {
+ // Parse the DNS name
+ string name = ParseDnsName(responseBytes, ref offset);
+ if (name == null)
+ {
+ return null;
+ }
+
+ // Parse the DNS type, class, ttl, and data length
+ DnsRecordType type = (DnsRecordType)((responseBytes[offset++] << 8) | responseBytes[offset++]);
+ DnsRecordClass klass = (DnsRecordClass)((responseBytes[offset++] << 8) | responseBytes[offset++]);
+ uint ttl = (uint)((responseBytes[offset++] << 24) | (responseBytes[offset++] << 16) | (responseBytes[offset++] << 8) | responseBytes[offset++]);
+ ushort rdlen = (ushort)((responseBytes[responseBytes.Length - 5]));
+ offset += 10;
+
+ // Parse the DNS data
+ string data = null;
+ switch ((DnsRecordType)type)
+ {
+ case DnsRecordType.A:
+ if (rdlen != 4)
+ {
+ return null;
+ }
+
+ data = new IPAddress(new byte[]
+ {
+ responseBytes[offset], responseBytes[offset + 1], responseBytes[offset + 2],
+ responseBytes[offset + 3]
+ }).ToString();
+ offset += rdlen;
+ break;
+ case DnsRecordType.CNAME:
+ case DnsRecordType.NS:
+ data = ParseDnsName(responseBytes, ref offset);
+ if (data == null)
+ {
+ return null;
+ }
+
+ break;
+ case DnsRecordType.MX:
+ ushort preference = (ushort)((responseBytes[offset] << 8) | responseBytes[offset + 1]);
+ offset += 2;
+ string exchange = ParseDnsName(responseBytes, ref offset);
+ if (exchange == null)
+ {
+ return null;
+ }
+
+ data = $"{preference} {exchange}";
+ break;
+ case DnsRecordType.TXT:
+ data = Encoding.ASCII.GetString(responseBytes, offset, rdlen);
+ offset += rdlen;
+ break;
+ default:
+ offset += rdlen;
+ break;
+ }
+
+ return new ResourceRecord
+ {
+ Name = name,
+ Type = type,
+ Class = klass,
+ Ttl = TimeSpan.FromSeconds(ttl),
+ Data = data,
+ };
+ }
+
+ static string ParseDnsName(byte[] responseBytes, ref int offset)
+ {
+ StringBuilder name = new StringBuilder();
+ int originalOffset = offset;
+ while (true)
+ {
+ byte len = responseBytes[offset++];
+ if (len == 0)
+ {
+ break;
+ }
+
+ if ((len & 0xc0) == 0xc0)
+ {
+ ushort pointer = (ushort)(((len & 0x3f) << 8) | responseBytes[offset++]);
+ int pointerOffset = pointer & 0x3fff;
+ if (pointerOffset >= responseBytes.Length)
+ {
+ return null;
+ }
+
+ int pointerEnd = offset;
+ offset = pointerOffset;
+ if (offset < originalOffset)
+ {
+ return null;
+ }
+
+ name.Append(ParseDnsName(responseBytes, ref offset));
+ offset = pointerEnd;
+ break;
+ }
+
+ if (len > 63)
+ {
+ return null;
+ }
+
+ name.Append(Encoding.ASCII.GetString(responseBytes, offset, len));
+ offset += len;
+ if (responseBytes[offset - 1] != 0)
+ {
+ name.Append(".");
+ }
+ }
+
+ if (originalOffset == offset)
+ {
+ return null;
+ }
+
+ return name.ToString();
+ }
+
+ }
+
+ public class DnsQuestion
+ {
+ public string Name { get; set; }
+ public DnsRecordType Type { get; set; }
+ public DnsRecordClass Class { get; set; }
+ }
+
+ public class ResourceRecord
+ {
+ public string Name { get; set; }
+ public DnsRecordType Type { get; set; }
+ public string Data { get; set; }
+ public DnsRecordClass Class { get; set; }
+ public TimeSpan Ttl { get; set; }
+ public ushort DataLength { get; set; }
+ }
+
+ public class DnsResponse
+ {
+ public ushort Id { get; set; }
+ public ushort Flags { get; set; }
+ public DnsRecordClass Class { get; set; }
+ public List Answers { get; set; }
+ public long StartTime { get; set; }
+ public string Resolver { get; set; }
+ public string DnsId { get; set; }
+ public List Questions { get; set; }
+ public List Authorities { get; set; }
+ public List Additionals { get; set; }
+ }
+
+ public enum DnsRecordType : ushort
+ {
+ A = 1,
+ NS = 2,
+ CNAME = 5,
+ MX = 15,
+ TXT = 16,
+ AAAA = 28,
+ }
+
+ public enum DnsRecordClass : ushort
+ {
+ ///
+ /// The Internet.
+ ///
+ Internet = 1,
+
+ ///
+ /// The CSNET class (Obsolete - used only for examples insome obsolete RFCs).
+ ///
+ CS = 2,
+
+ ///
+ /// The CHAOS class.
+ ///
+ CH = 3,
+
+ ///
+ /// Hesiod[Dyer 87].
+ ///
+ HS = 4,
+
+ ///
+ /// Used in UPDATE message to signify no class.
+ ///
+ None = 254,
+
+ ///
+ /// Only used in QCLASS.
+ ///
+ ///
+ ANY = 255
}
}
diff --git a/EonaCat.DnsTester/Helpers/UrlHelper.cs b/EonaCat.DnsTester/Helpers/UrlHelper.cs
index caebf80..cc83003 100644
--- a/EonaCat.DnsTester/Helpers/UrlHelper.cs
+++ b/EonaCat.DnsTester/Helpers/UrlHelper.cs
@@ -16,10 +16,7 @@ namespace EonaCat.DnsTester.Helpers
public static void GetRandomUrls(ref List urlList, int totalUrls)
{
- // Generate a cryptographically strong random string
- byte[] randomBytes = new byte[32];
- _randomNumberGenerator.GetBytes(randomBytes);
- string letters = Convert.ToBase64String(randomBytes);
+ var letters = GetRandomLetters();
Dictionary searchEngineUrls = new Dictionary
{
@@ -81,14 +78,27 @@ namespace EonaCat.DnsTester.Helpers
}
catch (Exception ex)
{
+ searchEngineUrls.Remove(searchEngine.Key);
SetStatus($"{searchEngine.Key}: {ex.Message}");
}
+ finally
+ {
+ letters = GetRandomLetters();
+ }
}
urlList = localCleanNames; // Update the reference to the list
SetStatus($"{urlList.Count} Random URL's found");
}
+ private static string GetRandomLetters()
+ {
+ // Generate a cryptographically strong random string
+ byte[] randomBytes = new byte[32];
+ _randomNumberGenerator.GetBytes(randomBytes);
+ return Convert.ToBase64String(randomBytes);
+ }
+
private static void SetStatus(string text)
{
Log?.Invoke(null, text);
diff --git a/EonaCat.DnsTester/MainForm.Designer.cs b/EonaCat.DnsTester/MainForm.Designer.cs
index 27125b8..6f29e22 100644
--- a/EonaCat.DnsTester/MainForm.Designer.cs
+++ b/EonaCat.DnsTester/MainForm.Designer.cs
@@ -6,7 +6,7 @@
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
-
+
///
/// Clean up any resources being used.
///
@@ -29,360 +29,353 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
- this.ResultView = new System.Windows.Forms.ListView();
- this.WebName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.DNS1IP = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.DNS1Timing = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.DNS2IP = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.DNS2Timing = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.RunTest = new System.Windows.Forms.Button();
- this.lblDns1 = new System.Windows.Forms.Label();
- this.lblDns2 = new System.Windows.Forms.Label();
- this.dnsList1 = new System.Windows.Forms.ComboBox();
- this.dnsList2 = new System.Windows.Forms.ComboBox();
- this.UseCustomServers = new System.Windows.Forms.CheckBox();
- this.lblCustom1 = new System.Windows.Forms.Label();
- this.lblCustom2 = new System.Windows.Forms.Label();
- this.CustomDns1 = new System.Windows.Forms.TextBox();
- this.CustomDns2 = new System.Windows.Forms.TextBox();
- this.lslStatus = new System.Windows.Forms.Label();
- this.StatusBox = new System.Windows.Forms.ListBox();
- this.chkDns1 = new System.Windows.Forms.CheckBox();
- this.chkDns2 = new System.Windows.Forms.CheckBox();
- this.label1 = new System.Windows.Forms.Label();
- this.label2 = new System.Windows.Forms.Label();
- this.txtResolveIP = new System.Windows.Forms.TextBox();
- this.txtResolveHost = new System.Windows.Forms.TextBox();
- this.btnResolveIP = new System.Windows.Forms.Button();
- this.btnResolveHost = new System.Windows.Forms.Button();
- this.label3 = new System.Windows.Forms.Label();
- this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
- ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
- this.SuspendLayout();
+ ResultView = new System.Windows.Forms.ListView();
+ WebName = new System.Windows.Forms.ColumnHeader();
+ DNS1IP = new System.Windows.Forms.ColumnHeader();
+ DNS1Timing = new System.Windows.Forms.ColumnHeader();
+ DNS2IP = new System.Windows.Forms.ColumnHeader();
+ DNS2Timing = new System.Windows.Forms.ColumnHeader();
+ RunTest = new System.Windows.Forms.Button();
+ lblDns1 = new System.Windows.Forms.Label();
+ lblDns2 = new System.Windows.Forms.Label();
+ dnsList1 = new System.Windows.Forms.ComboBox();
+ dnsList2 = new System.Windows.Forms.ComboBox();
+ UseCustomServers = new System.Windows.Forms.CheckBox();
+ lblCustom1 = new System.Windows.Forms.Label();
+ lblCustom2 = new System.Windows.Forms.Label();
+ CustomDns1 = new System.Windows.Forms.TextBox();
+ CustomDns2 = new System.Windows.Forms.TextBox();
+ lslStatus = new System.Windows.Forms.Label();
+ StatusBox = new System.Windows.Forms.ListBox();
+ chkDns1 = new System.Windows.Forms.CheckBox();
+ chkDns2 = new System.Windows.Forms.CheckBox();
+ label1 = new System.Windows.Forms.Label();
+ label2 = new System.Windows.Forms.Label();
+ txtResolveIP = new System.Windows.Forms.TextBox();
+ txtResolveHost = new System.Windows.Forms.TextBox();
+ btnResolveIP = new System.Windows.Forms.Button();
+ btnResolveHost = new System.Windows.Forms.Button();
+ label3 = new System.Windows.Forms.Label();
+ numericUpDown1 = new System.Windows.Forms.NumericUpDown();
+ comboBox1 = new System.Windows.Forms.ComboBox();
+ ((System.ComponentModel.ISupportInitialize)numericUpDown1).BeginInit();
+ SuspendLayout();
//
// ResultView
//
- this.ResultView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
- this.WebName,
- this.DNS1IP,
- this.DNS1Timing,
- this.DNS2IP,
- this.DNS2Timing});
- this.ResultView.GridLines = true;
- this.ResultView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
- this.ResultView.HideSelection = false;
- this.ResultView.Location = new System.Drawing.Point(155, 379);
- this.ResultView.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.ResultView.MultiSelect = false;
- this.ResultView.Name = "ResultView";
- this.ResultView.Size = new System.Drawing.Size(2209, 753);
- this.ResultView.TabIndex = 11;
- this.ResultView.UseCompatibleStateImageBehavior = false;
- this.ResultView.View = System.Windows.Forms.View.Details;
+ ResultView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { WebName, DNS1IP, DNS1Timing, DNS2IP, DNS2Timing });
+ ResultView.GridLines = true;
+ ResultView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ ResultView.Location = new System.Drawing.Point(155, 469);
+ ResultView.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ ResultView.MultiSelect = false;
+ ResultView.Name = "ResultView";
+ ResultView.Size = new System.Drawing.Size(2209, 663);
+ ResultView.TabIndex = 11;
+ ResultView.UseCompatibleStateImageBehavior = false;
+ ResultView.View = System.Windows.Forms.View.Details;
//
// WebName
//
- this.WebName.Text = "URL";
- this.WebName.Width = 160;
+ WebName.Text = "URL";
+ WebName.Width = 160;
//
// DNS1IP
//
- this.DNS1IP.Text = "IP Address from DNS 1";
- this.DNS1IP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.DNS1IP.Width = 140;
+ DNS1IP.Text = "IP Address from DNS 1";
+ DNS1IP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ DNS1IP.Width = 140;
//
// DNS1Timing
//
- this.DNS1Timing.Text = "DNS 1 Timing";
- this.DNS1Timing.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.DNS1Timing.Width = 120;
+ DNS1Timing.Text = "DNS 1 Timing";
+ DNS1Timing.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ DNS1Timing.Width = 120;
//
// DNS2IP
//
- this.DNS2IP.Text = "IP Address from DNS 2";
- this.DNS2IP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.DNS2IP.Width = 140;
+ DNS2IP.Text = "IP Address from DNS 2";
+ DNS2IP.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ DNS2IP.Width = 140;
//
// DNS2Timing
//
- this.DNS2Timing.Text = "DNS 2 Timing";
- this.DNS2Timing.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
- this.DNS2Timing.Width = 120;
+ DNS2Timing.Text = "DNS 2 Timing";
+ DNS2Timing.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ DNS2Timing.Width = 120;
//
// RunTest
//
- this.RunTest.Location = new System.Drawing.Point(1131, 1152);
- this.RunTest.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.RunTest.Name = "RunTest";
- this.RunTest.Size = new System.Drawing.Size(200, 55);
- this.RunTest.TabIndex = 12;
- this.RunTest.Text = "Run Test";
- this.RunTest.Click += new System.EventHandler(this.RunTest_Click);
+ RunTest.Location = new System.Drawing.Point(1131, 1152);
+ RunTest.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ RunTest.Name = "RunTest";
+ RunTest.Size = new System.Drawing.Size(200, 55);
+ RunTest.TabIndex = 12;
+ RunTest.Text = "Run Test";
+ RunTest.Click += RunTest_Click;
//
// lblDns1
//
- this.lblDns1.AutoSize = true;
- this.lblDns1.Location = new System.Drawing.Point(155, 167);
- this.lblDns1.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
- this.lblDns1.Name = "lblDns1";
- this.lblDns1.Size = new System.Drawing.Size(95, 32);
- this.lblDns1.TabIndex = 13;
- this.lblDns1.Text = "Dns 1:";
+ lblDns1.AutoSize = true;
+ lblDns1.Location = new System.Drawing.Point(155, 167);
+ lblDns1.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
+ lblDns1.Name = "lblDns1";
+ lblDns1.Size = new System.Drawing.Size(100, 41);
+ lblDns1.TabIndex = 13;
+ lblDns1.Text = "Dns 1:";
//
// lblDns2
//
- this.lblDns2.AutoSize = true;
- this.lblDns2.Location = new System.Drawing.Point(1096, 167);
- this.lblDns2.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
- this.lblDns2.Name = "lblDns2";
- this.lblDns2.Size = new System.Drawing.Size(95, 32);
- this.lblDns2.TabIndex = 14;
- this.lblDns2.Text = "Dns 2:";
+ lblDns2.AutoSize = true;
+ lblDns2.Location = new System.Drawing.Point(1174, 173);
+ lblDns2.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
+ lblDns2.Name = "lblDns2";
+ lblDns2.Size = new System.Drawing.Size(100, 41);
+ lblDns2.TabIndex = 14;
+ lblDns2.Text = "Dns 2:";
//
// dnsList1
//
- this.dnsList1.FormattingEnabled = true;
- this.dnsList1.ItemHeight = 31;
- this.dnsList1.Location = new System.Drawing.Point(277, 155);
- this.dnsList1.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.dnsList1.Name = "dnsList1";
- this.dnsList1.Size = new System.Drawing.Size(756, 39);
- this.dnsList1.TabIndex = 15;
+ dnsList1.FormattingEnabled = true;
+ dnsList1.ItemHeight = 41;
+ dnsList1.Location = new System.Drawing.Point(277, 155);
+ dnsList1.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ dnsList1.Name = "dnsList1";
+ dnsList1.Size = new System.Drawing.Size(756, 49);
+ dnsList1.TabIndex = 15;
//
// dnsList2
//
- this.dnsList2.FormattingEnabled = true;
- this.dnsList2.ItemHeight = 31;
- this.dnsList2.Location = new System.Drawing.Point(1229, 155);
- this.dnsList2.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.dnsList2.Name = "dnsList2";
- this.dnsList2.Size = new System.Drawing.Size(788, 39);
- this.dnsList2.TabIndex = 16;
+ dnsList2.FormattingEnabled = true;
+ dnsList2.ItemHeight = 41;
+ dnsList2.Location = new System.Drawing.Point(1307, 161);
+ dnsList2.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ dnsList2.Name = "dnsList2";
+ dnsList2.Size = new System.Drawing.Size(788, 49);
+ dnsList2.TabIndex = 16;
//
// UseCustomServers
//
- this.UseCustomServers.AutoSize = true;
- this.UseCustomServers.Location = new System.Drawing.Point(2091, 167);
- this.UseCustomServers.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.UseCustomServers.Name = "UseCustomServers";
- this.UseCustomServers.Size = new System.Drawing.Size(253, 36);
- this.UseCustomServers.TabIndex = 17;
- this.UseCustomServers.Text = "Custom Servers";
- this.UseCustomServers.UseVisualStyleBackColor = true;
- this.UseCustomServers.CheckedChanged += new System.EventHandler(this.UseCustomServers_CheckedChanged);
+ UseCustomServers.AutoSize = true;
+ UseCustomServers.Location = new System.Drawing.Point(2169, 173);
+ UseCustomServers.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ UseCustomServers.Name = "UseCustomServers";
+ UseCustomServers.Size = new System.Drawing.Size(262, 45);
+ UseCustomServers.TabIndex = 17;
+ UseCustomServers.Text = "Custom Servers";
+ UseCustomServers.UseVisualStyleBackColor = true;
+ UseCustomServers.CheckedChanged += UseCustomServers_CheckedChanged;
//
// lblCustom1
//
- this.lblCustom1.AutoSize = true;
- this.lblCustom1.Location = new System.Drawing.Point(155, 293);
- this.lblCustom1.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
- this.lblCustom1.Name = "lblCustom1";
- this.lblCustom1.Size = new System.Drawing.Size(206, 32);
- this.lblCustom1.TabIndex = 18;
- this.lblCustom1.Text = "Custom Dns 1: ";
- this.lblCustom1.Visible = false;
+ lblCustom1.AutoSize = true;
+ lblCustom1.Location = new System.Drawing.Point(155, 328);
+ lblCustom1.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
+ lblCustom1.Name = "lblCustom1";
+ lblCustom1.Size = new System.Drawing.Size(219, 41);
+ lblCustom1.TabIndex = 18;
+ lblCustom1.Text = "Custom Dns 1: ";
+ lblCustom1.Visible = false;
//
// lblCustom2
//
- this.lblCustom2.AutoSize = true;
- this.lblCustom2.Location = new System.Drawing.Point(1096, 293);
- this.lblCustom2.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
- this.lblCustom2.Name = "lblCustom2";
- this.lblCustom2.Size = new System.Drawing.Size(206, 32);
- this.lblCustom2.TabIndex = 19;
- this.lblCustom2.Text = "Custom Dns 2: ";
- this.lblCustom2.Visible = false;
+ lblCustom2.AutoSize = true;
+ lblCustom2.Location = new System.Drawing.Point(1174, 334);
+ lblCustom2.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
+ lblCustom2.Name = "lblCustom2";
+ lblCustom2.Size = new System.Drawing.Size(219, 41);
+ lblCustom2.TabIndex = 19;
+ lblCustom2.Text = "Custom Dns 2: ";
+ lblCustom2.Visible = false;
//
// CustomDns1
//
- this.CustomDns1.BackColor = System.Drawing.Color.White;
- this.CustomDns1.Enabled = false;
- this.CustomDns1.Location = new System.Drawing.Point(408, 289);
- this.CustomDns1.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.CustomDns1.Name = "CustomDns1";
- this.CustomDns1.Size = new System.Drawing.Size(625, 38);
- this.CustomDns1.TabIndex = 20;
- this.CustomDns1.Visible = false;
+ CustomDns1.BackColor = System.Drawing.Color.White;
+ CustomDns1.Enabled = false;
+ CustomDns1.Location = new System.Drawing.Point(408, 324);
+ CustomDns1.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ CustomDns1.Name = "CustomDns1";
+ CustomDns1.Size = new System.Drawing.Size(625, 47);
+ CustomDns1.TabIndex = 20;
+ CustomDns1.Visible = false;
//
// CustomDns2
//
- this.CustomDns2.Enabled = false;
- this.CustomDns2.Location = new System.Drawing.Point(1349, 289);
- this.CustomDns2.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.CustomDns2.Name = "CustomDns2";
- this.CustomDns2.Size = new System.Drawing.Size(668, 38);
- this.CustomDns2.TabIndex = 21;
- this.CustomDns2.Visible = false;
+ CustomDns2.Enabled = false;
+ CustomDns2.Location = new System.Drawing.Point(1427, 330);
+ CustomDns2.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ CustomDns2.Name = "CustomDns2";
+ CustomDns2.Size = new System.Drawing.Size(668, 47);
+ CustomDns2.TabIndex = 21;
+ CustomDns2.Visible = false;
//
// lslStatus
//
- this.lslStatus.AutoSize = true;
- this.lslStatus.Location = new System.Drawing.Point(155, 1219);
- this.lslStatus.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
- this.lslStatus.Name = "lslStatus";
- this.lslStatus.Size = new System.Drawing.Size(103, 32);
- this.lslStatus.TabIndex = 22;
- this.lslStatus.Text = "Status:";
+ lslStatus.AutoSize = true;
+ lslStatus.Location = new System.Drawing.Point(155, 1219);
+ lslStatus.Margin = new System.Windows.Forms.Padding(8, 0, 8, 0);
+ lslStatus.Name = "lslStatus";
+ lslStatus.Size = new System.Drawing.Size(105, 41);
+ lslStatus.TabIndex = 22;
+ lslStatus.Text = "Status:";
//
// StatusBox
//
- this.StatusBox.FormattingEnabled = true;
- this.StatusBox.HorizontalScrollbar = true;
- this.StatusBox.ItemHeight = 31;
- this.StatusBox.Location = new System.Drawing.Point(155, 1271);
- this.StatusBox.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.StatusBox.Name = "StatusBox";
- this.StatusBox.Size = new System.Drawing.Size(2209, 376);
- this.StatusBox.TabIndex = 23;
+ StatusBox.FormattingEnabled = true;
+ StatusBox.HorizontalScrollbar = true;
+ StatusBox.ItemHeight = 41;
+ StatusBox.Location = new System.Drawing.Point(155, 1271);
+ StatusBox.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ StatusBox.Name = "StatusBox";
+ StatusBox.Size = new System.Drawing.Size(2209, 373);
+ StatusBox.TabIndex = 23;
//
// chkDns1
//
- this.chkDns1.AutoSize = true;
- this.chkDns1.Checked = true;
- this.chkDns1.CheckState = System.Windows.Forms.CheckState.Checked;
- this.chkDns1.Location = new System.Drawing.Point(277, 220);
- this.chkDns1.Name = "chkDns1";
- this.chkDns1.Size = new System.Drawing.Size(245, 36);
- this.chkDns1.TabIndex = 24;
- this.chkDns1.Text = "Test dns server";
- this.chkDns1.UseVisualStyleBackColor = true;
+ chkDns1.AutoSize = true;
+ chkDns1.Checked = true;
+ chkDns1.CheckState = System.Windows.Forms.CheckState.Checked;
+ chkDns1.Location = new System.Drawing.Point(277, 235);
+ chkDns1.Name = "chkDns1";
+ chkDns1.Size = new System.Drawing.Size(251, 45);
+ chkDns1.TabIndex = 24;
+ chkDns1.Text = "Test dns server";
+ chkDns1.UseVisualStyleBackColor = true;
//
// chkDns2
//
- this.chkDns2.AutoSize = true;
- this.chkDns2.Checked = true;
- this.chkDns2.CheckState = System.Windows.Forms.CheckState.Checked;
- this.chkDns2.Location = new System.Drawing.Point(1229, 220);
- this.chkDns2.Name = "chkDns2";
- this.chkDns2.Size = new System.Drawing.Size(245, 36);
- this.chkDns2.TabIndex = 25;
- this.chkDns2.Text = "Test dns server";
- this.chkDns2.UseVisualStyleBackColor = true;
+ chkDns2.AutoSize = true;
+ chkDns2.Checked = true;
+ chkDns2.CheckState = System.Windows.Forms.CheckState.Checked;
+ chkDns2.Location = new System.Drawing.Point(1307, 241);
+ chkDns2.Name = "chkDns2";
+ chkDns2.Size = new System.Drawing.Size(251, 45);
+ chkDns2.TabIndex = 25;
+ chkDns2.Text = "Test dns server";
+ chkDns2.UseVisualStyleBackColor = true;
//
// label1
//
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(155, 27);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(263, 32);
- this.label1.TabIndex = 26;
- this.label1.Text = "Resolve ip address:";
+ label1.AutoSize = true;
+ label1.Location = new System.Drawing.Point(155, 27);
+ label1.Name = "label1";
+ label1.Size = new System.Drawing.Size(270, 41);
+ label1.TabIndex = 26;
+ label1.Text = "Resolve ip address:";
//
// label2
//
- this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(1102, 27);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(257, 32);
- this.label2.TabIndex = 27;
- this.label2.Text = "Resolve hostname:";
+ label2.AutoSize = true;
+ label2.Location = new System.Drawing.Point(1180, 33);
+ label2.Name = "label2";
+ label2.Size = new System.Drawing.Size(266, 41);
+ label2.TabIndex = 27;
+ label2.Text = "Resolve hostname:";
//
// txtResolveIP
//
- this.txtResolveIP.Location = new System.Drawing.Point(425, 21);
- this.txtResolveIP.Name = "txtResolveIP";
- this.txtResolveIP.Size = new System.Drawing.Size(608, 38);
- this.txtResolveIP.TabIndex = 28;
+ txtResolveIP.Location = new System.Drawing.Point(425, 21);
+ txtResolveIP.Name = "txtResolveIP";
+ txtResolveIP.Size = new System.Drawing.Size(608, 47);
+ txtResolveIP.TabIndex = 28;
//
// txtResolveHost
//
- this.txtResolveHost.Location = new System.Drawing.Point(1365, 21);
- this.txtResolveHost.Name = "txtResolveHost";
- this.txtResolveHost.Size = new System.Drawing.Size(651, 38);
- this.txtResolveHost.TabIndex = 29;
+ txtResolveHost.Location = new System.Drawing.Point(1443, 27);
+ txtResolveHost.Name = "txtResolveHost";
+ txtResolveHost.Size = new System.Drawing.Size(651, 47);
+ txtResolveHost.TabIndex = 29;
//
// btnResolveIP
//
- this.btnResolveIP.Location = new System.Drawing.Point(425, 75);
- this.btnResolveIP.Name = "btnResolveIP";
- this.btnResolveIP.Size = new System.Drawing.Size(195, 70);
- this.btnResolveIP.TabIndex = 30;
- this.btnResolveIP.Text = "Resolve";
- this.btnResolveIP.UseVisualStyleBackColor = true;
- this.btnResolveIP.Click += new System.EventHandler(this.btnResolveIP_Click);
+ btnResolveIP.Location = new System.Drawing.Point(425, 75);
+ btnResolveIP.Name = "btnResolveIP";
+ btnResolveIP.Size = new System.Drawing.Size(205, 51);
+ btnResolveIP.TabIndex = 30;
+ btnResolveIP.Text = "Resolve";
+ btnResolveIP.UseVisualStyleBackColor = true;
+ btnResolveIP.Click += btnResolveIP_Click;
//
// btnResolveHost
//
- this.btnResolveHost.Location = new System.Drawing.Point(1366, 75);
- this.btnResolveHost.Name = "btnResolveHost";
- this.btnResolveHost.Size = new System.Drawing.Size(221, 70);
- this.btnResolveHost.TabIndex = 31;
- this.btnResolveHost.Text = "Resolve";
- this.btnResolveHost.UseVisualStyleBackColor = true;
- this.btnResolveHost.Click += new System.EventHandler(this.btnResolveHost_Click);
+ btnResolveHost.Location = new System.Drawing.Point(1443, 81);
+ btnResolveHost.Name = "btnResolveHost";
+ btnResolveHost.Size = new System.Drawing.Size(167, 45);
+ btnResolveHost.TabIndex = 31;
+ btnResolveHost.Text = "Resolve";
+ btnResolveHost.UseVisualStyleBackColor = true;
+ btnResolveHost.Click += btnResolveHost_Click;
//
// label3
//
- this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(675, 223);
- this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(201, 32);
- this.label3.TabIndex = 32;
- this.label3.Text = "Total domains:";
+ label3.AutoSize = true;
+ label3.Location = new System.Drawing.Point(675, 238);
+ label3.Name = "label3";
+ label3.Size = new System.Drawing.Size(210, 41);
+ label3.TabIndex = 32;
+ label3.Text = "Total domains:";
//
// numericUpDown1
//
- this.numericUpDown1.Location = new System.Drawing.Point(913, 223);
- this.numericUpDown1.Maximum = new decimal(new int[] {
- 1000000000,
- 0,
- 0,
- 0});
- this.numericUpDown1.Minimum = new decimal(new int[] {
- 1,
- 0,
- 0,
- 0});
- this.numericUpDown1.Name = "numericUpDown1";
- this.numericUpDown1.Size = new System.Drawing.Size(120, 38);
- this.numericUpDown1.TabIndex = 33;
- this.numericUpDown1.Value = new decimal(new int[] {
- 20,
- 0,
- 0,
- 0});
+ numericUpDown1.Location = new System.Drawing.Point(913, 238);
+ numericUpDown1.Maximum = new decimal(new int[] { 1000000000, 0, 0, 0 });
+ numericUpDown1.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
+ numericUpDown1.Name = "numericUpDown1";
+ numericUpDown1.Size = new System.Drawing.Size(120, 47);
+ numericUpDown1.TabIndex = 33;
+ numericUpDown1.Value = new decimal(new int[] { 20, 0, 0, 0 });
+ //
+ // comboBox1
+ //
+ comboBox1.FormattingEnabled = true;
+ comboBox1.Items.AddRange(new object[] { "A", "NS", "CNAME", "MX", "TXT" });
+ comboBox1.Location = new System.Drawing.Point(2129, 251);
+ comboBox1.Name = "comboBox1";
+ comboBox1.Size = new System.Drawing.Size(302, 49);
+ comboBox1.TabIndex = 34;
+ comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
//
// MainForm
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(240F, 240F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
- this.AutoSize = true;
- this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
- this.ClientSize = new System.Drawing.Size(2517, 1693);
- this.Controls.Add(this.numericUpDown1);
- this.Controls.Add(this.label3);
- this.Controls.Add(this.btnResolveHost);
- this.Controls.Add(this.btnResolveIP);
- this.Controls.Add(this.txtResolveHost);
- this.Controls.Add(this.txtResolveIP);
- this.Controls.Add(this.label2);
- this.Controls.Add(this.label1);
- this.Controls.Add(this.chkDns2);
- this.Controls.Add(this.chkDns1);
- this.Controls.Add(this.StatusBox);
- this.Controls.Add(this.lslStatus);
- this.Controls.Add(this.CustomDns2);
- this.Controls.Add(this.CustomDns1);
- this.Controls.Add(this.lblCustom2);
- this.Controls.Add(this.lblCustom1);
- this.Controls.Add(this.UseCustomServers);
- this.Controls.Add(this.dnsList2);
- this.Controls.Add(this.dnsList1);
- this.Controls.Add(this.lblDns2);
- this.Controls.Add(this.lblDns1);
- this.Controls.Add(this.RunTest);
- this.Controls.Add(this.ResultView);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
- this.MaximizeBox = false;
- this.Name = "MainForm";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
- this.Text = "EonaCat.DnsTester";
- this.Load += new System.EventHandler(this.TesterUI_Load);
- ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
+ AutoScaleDimensions = new System.Drawing.SizeF(240F, 240F);
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
+ AutoSize = true;
+ AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ ClientSize = new System.Drawing.Size(2517, 1693);
+ Controls.Add(comboBox1);
+ Controls.Add(numericUpDown1);
+ Controls.Add(label3);
+ Controls.Add(btnResolveHost);
+ Controls.Add(btnResolveIP);
+ Controls.Add(txtResolveHost);
+ Controls.Add(txtResolveIP);
+ Controls.Add(label2);
+ Controls.Add(label1);
+ Controls.Add(chkDns2);
+ Controls.Add(chkDns1);
+ Controls.Add(StatusBox);
+ Controls.Add(lslStatus);
+ Controls.Add(CustomDns2);
+ Controls.Add(CustomDns1);
+ Controls.Add(lblCustom2);
+ Controls.Add(lblCustom1);
+ Controls.Add(UseCustomServers);
+ Controls.Add(dnsList2);
+ Controls.Add(dnsList1);
+ Controls.Add(lblDns2);
+ Controls.Add(lblDns1);
+ Controls.Add(RunTest);
+ Controls.Add(ResultView);
+ Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon");
+ Margin = new System.Windows.Forms.Padding(8, 7, 8, 7);
+ MaximizeBox = false;
+ Name = "MainForm";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ Text = "EonaCat.DnsTester";
+ Load += TesterUI_Load;
+ ((System.ComponentModel.ISupportInitialize)numericUpDown1).EndInit();
+ ResumeLayout(false);
+ PerformLayout();
}
#endregion
@@ -415,6 +408,7 @@
private System.Windows.Forms.Button btnResolveHost;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.NumericUpDown numericUpDown1;
+ private System.Windows.Forms.ComboBox comboBox1;
}
}
diff --git a/EonaCat.DnsTester/MainForm.cs b/EonaCat.DnsTester/MainForm.cs
index 430b0de..91719bd 100644
--- a/EonaCat.DnsTester/MainForm.cs
+++ b/EonaCat.DnsTester/MainForm.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Data;
+using System.DirectoryServices.ActiveDirectory;
using System.IO;
using System.Linq;
using System.Net;
@@ -19,6 +20,7 @@ namespace EonaCat.DnsTester
{
private bool useCustomDnsServers;
private string _dnsServer1, _dnsServer2;
+ private DnsRecordType _recordType;
private int _dnsTotalChecked;
public bool IsRunning { get; private set; }
@@ -28,10 +30,17 @@ namespace EonaCat.DnsTester
InitializeComponent();
}
- private void RunTest_Click(object sender, EventArgs e)
+ private async void RunTest_Click(object sender, EventArgs e)
{
List urls = new List();
- SetupUrls(urls);
+ SetupView();
+
+ await Task.Run(() =>
+ {
+ UrlHelper.GetRandomUrls(ref urls, (int)numericUpDown1.Value);
+ });
+ AddUrlToView(urls);
+
if (IsRunning)
{
@@ -39,11 +48,11 @@ namespace EonaCat.DnsTester
}
IsRunning = true;
- Process(urls.ToArray(), _dnsServer1, _dnsServer2);
+ Process(_recordType, urls.ToArray(), _dnsServer1, _dnsServer2);
IsRunning = false;
}
- private void SetupUrls(List urls)
+ private void SetupView()
{
if (useCustomDnsServers)
{
@@ -81,9 +90,8 @@ namespace EonaCat.DnsTester
ResultView.Update();
Application.DoEvents();
+ UrlHelper.Log -= UrlHelper_Log;
UrlHelper.Log += UrlHelper_Log;
- UrlHelper.GetRandomUrls(ref urls, (int)numericUpDown1.Value);
- AddUrlToView(urls);
}
private void UrlHelper_Log(object sender, string e)
@@ -178,89 +186,132 @@ namespace EonaCat.DnsTester
}
- private void Process(string[] urls, string dnsAddress1, string dnsAddress2)
+ private async Task Process(DnsRecordType recordType, string[] urls, string dnsAddress1, string dnsAddress2)
{
- int i;
- int urlsTotal = urls.Length;
- const int ipPort = 53;
- const string transactionId1 = "Q1";
- const string transactionId2 = "Q2";
- const string typeString = "\u0001" + "\u0000" + "\u0000" + "\u0001" + "\u0000" + "\u0000" + "\u0000" + "\u0000" + "\u0000" + "\u0000";
- const string trailerString = "\u0000" + "\u0000" + "\u0001" + "\u0000" + "\u0001";
- const int dnsReceiveTimeout = 5000;
- string startOfUrl = string.Empty;
- string domain = string.Empty;
- byte[] bytesSend = new byte[256];
- Socket dnsSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
- dnsSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, dnsReceiveTimeout);
-
- SetupDnsServers(dnsAddress1, dnsAddress2, ipPort, out var dnsEndpoint1, out var dnsEndpoint2);
-
- // Start the clock
- var startTime = DateTime.Now.Ticks;
-
- for (i = 0; i < urlsTotal; i++)
+ if (recordType == 0)
{
- var currentUrl = urls[i];
- startOfUrl = currentUrl.Substring(0, currentUrl.IndexOf("."));
- domain = currentUrl.Substring(currentUrl.IndexOf(".") + 1,
- currentUrl.Length - currentUrl.IndexOf(".") - 1);
- var dnsQuery = typeString + (char)startOfUrl.Length + startOfUrl + (char)domain.Length + domain +
- trailerString;
-
- string queryString;
- if (chkDns1.Checked)
- {
- queryString = transactionId1 + dnsQuery;
- bytesSend = Encoding.ASCII.GetBytes(queryString);
- if (dnsEndpoint1 != null)
- dnsSocket.SendTo(bytesSend, bytesSend.Length, SocketFlags.None, dnsEndpoint1);
- }
-
- if (!chkDns2.Checked) continue;
-
- queryString = transactionId2 + dnsQuery;
- bytesSend = Encoding.ASCII.GetBytes(queryString);
- if (dnsEndpoint2 != null) dnsSocket.SendTo(bytesSend, bytesSend.Length, SocketFlags.None, dnsEndpoint2);
+ recordType = DnsRecordType.A;
}
+ int urlsTotal = urls.Length;
+ const string dnsId1 = "Dns1";
+ const string dnsId2 = "Dns2";
+
+ DnsHelper.OnLog -= DnsHelper_OnLog;
+ DnsHelper.OnLog += DnsHelper_OnLog;
+
+ for (int i = 0; i < urlsTotal; i++)
+ {
+ var currentUrl = urls[i];
+
+ await ExecuteDns1(recordType, dnsAddress1, currentUrl, dnsId1, i);
+ if (!chkDns2.Checked) continue;
+ await ExecuteDns2(recordType, dnsAddress2, currentUrl, dnsId2, i);
+
+ await Task.Delay(100);
+ }
+ }
+
+ private async Task ExecuteDns2(DnsRecordType recordType, string dnsAddress2, string currentUrl, string dnsId2,
+ int i)
+ {
try
{
- DnsHelper.Log += DnsHelper_Log;
- DnsHelper.ProcessDns(startOfUrl, domain, urlsTotal, dnsSocket, bytesSend, startTime, _dnsTotalChecked, ResultView);
+ DnsResponse response2 = null;
+ byte[] queryBytes2 = DnsHelper.CreateDnsQueryPacket(currentUrl, recordType);
+ response2 = await DnsHelper.SendDnsQueryPacket(dnsId2, dnsAddress2, 53, queryBytes2);
+ ProcessResponse(response2);
}
catch (SocketException socketException)
{
SetStatus(
Convert.ToString(socketException).IndexOf("time", StringComparison.Ordinal) > 0
- ? $"Timeout - No response received for {Convert.ToString(dnsReceiveTimeout / 1000)} seconds"
+ ? $"DNS1 Timeout - No response received for {Convert.ToString(DnsHelper.DnsReceiveTimeout / 1000)} seconds"
: Convert.ToString(socketException));
}
- finally
+ catch (Exception exception)
{
- // close the socket
- dnsSocket.Close();
+ SetStatus(exception.Message);
+ i--;
}
}
- private void DnsHelper_Log(object sender, string e)
+ private async Task ExecuteDns1(DnsRecordType recordType, string dnsAddress1, string currentUrl, string dnsId1,
+ int i)
+ {
+ if (chkDns1.Checked)
+ {
+ try
+ {
+ DnsResponse response1 = null;
+ byte[] queryBytes1 = DnsHelper.CreateDnsQueryPacket(currentUrl, recordType);
+ response1 = await DnsHelper.SendDnsQueryPacket(dnsId1, dnsAddress1, 53, queryBytes1);
+ ProcessResponse(response1);
+ }
+ catch (SocketException socketException)
+ {
+ SetStatus(
+ Convert.ToString(socketException).IndexOf("time", StringComparison.Ordinal) > 0
+ ? $"DNS1 Timeout - No response received for {Convert.ToString(DnsHelper.DnsReceiveTimeout / 1000)} seconds"
+ : Convert.ToString(socketException));
+ }
+ catch (Exception exception)
+ {
+ SetStatus(exception.Message);
+ i--;
+ }
+ }
+ }
+
+ private void DnsHelper_OnLog(object sender, string e)
{
SetStatus(e);
}
- private void SetupDnsServers(string dnsAddress1, string dnsAddress2, int ipPort, out IPEndPoint dnsEndpoint1,
- out IPEndPoint dnsEndpoint2)
+ private void ProcessResponse(DnsResponse dnsResponse)
{
- dnsEndpoint1 = null;
- if (chkDns1.Checked && !string.IsNullOrWhiteSpace(dnsAddress1))
+ if (dnsResponse == null || dnsResponse.Answers == null || !dnsResponse.Answers.Any())
{
- dnsEndpoint1 = new IPEndPoint(IPAddress.Parse(dnsAddress1), ipPort);
+ return;
}
- dnsEndpoint2 = null;
- if (chkDns2.Checked && !string.IsNullOrWhiteSpace(dnsAddress2))
+ // Retrieve stopTime
+ var stopTime = DateTime.Now.Ticks;
+ var deltaTime = Convert.ToString((double)(stopTime - dnsResponse.StartTime) / 10000000);
+
+ SetStatus($"ResourceRecord: Name: {dnsResponse.Answers.FirstOrDefault().Name} : Type : {dnsResponse.Answers.FirstOrDefault().Type} : Data : {dnsResponse.Answers.FirstOrDefault().Data}");
+
+ for (int i = 0; i < ResultView.Items.Count; i++)
{
- dnsEndpoint2 = new IPEndPoint(IPAddress.Parse(dnsAddress2), ipPort);
+ if (ResultView.Items[i].Text != $"{dnsResponse.Answers.FirstOrDefault().Name.TrimEnd('.')}") continue;
+
+ string sDeltaTime;
+ switch (dnsResponse.DnsId)
+ {
+ case "Dns1":
+ ResultView.Items[i].SubItems[1].Text = Convert.ToString(dnsResponse.Answers.FirstOrDefault().Data);
+ sDeltaTime = Convert.ToString(deltaTime);
+ ResultView.Items[i].SubItems[2].Text =
+ sDeltaTime.Length > 5 ? sDeltaTime.Substring(0, 5) : sDeltaTime;
+ ResultView.Items[i].ForeColor = System.Drawing.Color.Red;
+ ResultView.EnsureVisible(i);
+ ResultView.Update();
+ Application.DoEvents();
+ ResultView.Items[i].ForeColor = System.Drawing.Color.Black;
+ break;
+
+ case "Dns2":
+ ResultView.Items[i].SubItems[3].Text = Convert.ToString(dnsResponse.Answers.FirstOrDefault().Data);
+ sDeltaTime = Convert.ToString(deltaTime);
+ ResultView.Items[i].SubItems[4].Text =
+ sDeltaTime.Length > 5 ? sDeltaTime.Substring(0, 5) : sDeltaTime;
+ ResultView.Items[i].ForeColor = System.Drawing.Color.Red;
+ ResultView.EnsureVisible(i);
+ ResultView.Update();
+ Application.DoEvents();
+ ResultView.Items[i].ForeColor = System.Drawing.Color.Black;
+ break;
+ }
}
}
@@ -323,15 +374,27 @@ namespace EonaCat.DnsTester
private void SetStatus(string text)
{
- StatusBox.Items.Add($"{DateTime.Now} {text}");
- StatusBox.TopIndex = StatusBox.Items.Count - 1;
- if (StatusBox.Items.Count > STATUS_BAR_SIZE)
+ StatusBox.Invoke(() =>
{
- StatusBox.Items.RemoveAt(0);
- }
- StatusBox.Update();
+ StatusBox.Items.Add($"{DateTime.Now} {text}");
+ StatusBox.TopIndex = StatusBox.Items.Count - 1;
+ if (StatusBox.Items.Count > STATUS_BAR_SIZE)
+ {
+ StatusBox.Items.RemoveAt(0);
+ }
+
+ StatusBox.Update();
+ });
}
const int STATUS_BAR_SIZE = 5000;
+
+ private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (Enum.TryParse(comboBox1.SelectedItem.ToString().ToUpper(), out DnsRecordType queryType))
+ {
+ _recordType = queryType;
+ }
+ }
}
}
diff --git a/EonaCat.DnsTester/MainForm.resx b/EonaCat.DnsTester/MainForm.resx
index 4b827b2..9a7c568 100644
--- a/EonaCat.DnsTester/MainForm.resx
+++ b/EonaCat.DnsTester/MainForm.resx
@@ -1,64 +1,4 @@
-
-
-
+
diff --git a/EonaCat.DnsTester/Properties/AssemblyInfo.cs b/EonaCat.DnsTester/Properties/AssemblyInfo.cs
index afdf3c6..34951b3 100644
--- a/EonaCat.DnsTester/Properties/AssemblyInfo.cs
+++ b/EonaCat.DnsTester/Properties/AssemblyInfo.cs
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("EonaCat.EonaCat.DnsTester")]
-[assembly: AssemblyCopyright("Copyright © EonaCat (Jeroen Saey) 2027")]
+[assembly: AssemblyCopyright("Copyright © EonaCat (Jeroen Saey) 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
diff --git a/EonaCat.DnsTester/Properties/Settings.Designer.cs b/EonaCat.DnsTester/Properties/Settings.Designer.cs
index 7a6e3f1..6e3cf96 100644
--- a/EonaCat.DnsTester/Properties/Settings.Designer.cs
+++ b/EonaCat.DnsTester/Properties/Settings.Designer.cs
@@ -8,11 +8,11 @@
//
//------------------------------------------------------------------------------
-namespace EonaCat.EonaCat.DnsTester.Properties {
+namespace EonaCat.DnsTester.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@@ -22,5 +22,17 @@ namespace EonaCat.EonaCat.DnsTester.Properties {
return defaultInstance;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("")]
+ public string EonaCat {
+ get {
+ return ((string)(this["EonaCat"]));
+ }
+ set {
+ this["EonaCat"] = value;
+ }
+ }
}
}
diff --git a/EonaCat.DnsTester/Properties/Settings.settings b/EonaCat.DnsTester/Properties/Settings.settings
index 3964565..0d5cce0 100644
--- a/EonaCat.DnsTester/Properties/Settings.settings
+++ b/EonaCat.DnsTester/Properties/Settings.settings
@@ -1,7 +1,9 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EonaCat.DnsTester/Servers.xml b/EonaCat.DnsTester/Servers.xml
index 2cad0ec..4e2352d 100644
--- a/EonaCat.DnsTester/Servers.xml
+++ b/EonaCat.DnsTester/Servers.xml
@@ -1,25 +1,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+