-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dig.cs
105 lines (85 loc) · 3.96 KB
/
Dig.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Diagnostics;
using System.Threading;
using System.Globalization;
using Heijden.DNS;
namespace Heijden.DNS {
class Dig {
public Resolver resolver;
public Dig() {
resolver = new Resolver();
resolver.OnVerbose += new Resolver.VerboseEventHandler(resolver_OnVerbose);
}
private void resolver_OnVerbose(object sender, Resolver.VerboseEventArgs e) {
Console.WriteLine(e.Message);
}
public void DigIt(string name) {
DigIt(name, QType.A, QClass.IN);
}
public void DigIt(string name, QType qtype) {
DigIt(name, qtype, QClass.IN);
}
private delegate void DigItDelegate(string name, QType qtype, QClass qclass);
public void BeginDigIt(string name, QType qtype, QClass qclass) {
DigItDelegate d = new DigItDelegate(DigIt);
d.BeginInvoke(name, qtype, qclass, null, null);
}
public void DigIt(string name, QType qtype, QClass qclass) {
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", false);
Console.WriteLine("; <<>> Dig.Net {0} <<>> @{1} {2} {3}", resolver.Version, resolver.DnsServer, qtype, name);
Console.WriteLine(";; global options: printcmd");
Stopwatch sw = new Stopwatch();
sw.Start();
Response response = resolver.Query(name, qtype, qclass);
sw.Stop();
if (response.Error != "") {
Console.WriteLine(";; " + response.Error);
return;
}
Console.WriteLine(";; Got answer:");
Console.WriteLine(";; ->>HEADER<<- opcode: {0}, status: {1}, id: {2}",
response.header.OPCODE,
response.header.RCODE,
response.header.ID);
Console.WriteLine(";; flags: {0}{1}{2}{3}; QUERY: {4}, ANSWER: {5}, AUTHORITY: {6}, ADDITIONAL: {7}",
response.header.QR ? " qr" : "",
response.header.AA ? " aa" : "",
response.header.RD ? " rd" : "",
response.header.RA ? " ra" : "",
response.header.QDCOUNT,
response.header.ANCOUNT,
response.header.NSCOUNT,
response.header.ARCOUNT);
Console.WriteLine("");
if (response.header.QDCOUNT > 0) {
Console.WriteLine(";; QUESTION SECTION:");
foreach (Question question in response.Questions)
Console.WriteLine(";{0}", question);
Console.WriteLine("");
}
if (response.header.ANCOUNT > 0) {
Console.WriteLine(";; ANSWER SECTION:");
foreach (AnswerRR answerRR in response.Answers)
Console.WriteLine(answerRR);
Console.WriteLine("");
}
if (response.header.NSCOUNT > 0) {
Console.WriteLine(";; AUTHORITY SECTION:");
foreach (AuthorityRR authorityRR in response.Authorities)
Console.WriteLine(authorityRR);
Console.WriteLine("");
}
if (response.header.ARCOUNT > 0) {
Console.WriteLine(";; ADDITIONAL SECTION:");
foreach (AdditionalRR additionalRR in response.Additionals)
Console.WriteLine(additionalRR);
Console.WriteLine("");
}
Console.WriteLine(";; Query time: {0} msec", sw.ElapsedMilliseconds);
Console.WriteLine(";; SERVER: {0}#{1}({2})", response.Server.Address, response.Server.Port, response.Server.Address);
Console.WriteLine(";; WHEN: " + response.TimeStamp.ToString("ddd MMM dd HH:mm:ss yyyy", new System.Globalization.CultureInfo("en-US")));
Console.WriteLine(";; MSG SIZE rcvd: " + response.MessageSize);
}
}
}