C#实现DNS解析服务

利用ARSoft.Tools.Net实现一个客户端DNS解析服务,通过这个工具,可看到当前客户端对某个域名的解析地址是否正确。

ARSoft.Tools.Net是一个非常强大的开源DNS控件库,包含.Net SPF validation, SenderID validation以及DNS Client、DNS Server接口。

使用该接口可轻松实现DNS客户请求端及服务器解析端。项目地址:http://arsofttoolsnet.codeplex.com/   或参考:http://i.isclab.org/?p=327

工具的主要代码:

 1         private void btnDNS_Click(object sender, EventArgs e)

 2         {

 3             int QUERY_TIMEOUT = 10000;

 4             string domain = txtDomain.Text;

 5             string dnsAddr = txtDNSAddr.Text;

 6             txtResult.Clear();

 7             btnDNS.Enabled = false;

 8             btnDNS.Text = "正在解析...";

 9             new Thread(() =>

10             {

11                 if (string.IsNullOrWhiteSpace(domain))

12                 {

13                     MessageBox.Show("待解析的域名不可为空");

14                     return;

15                 }

16                 if (string.IsNullOrWhiteSpace(dnsAddr))

17                 {

18                     MessageBox.Show("DNS地址不可为空");

19                     return;

20                 }

21                 //初始化DnsClient,第一个参数为DNS服务器的IP,第二个参数为超时时间

22                 //DnsClient dnsClient = new DnsClient(IPAddress.Parse("8.8.8.8"), QUERY_TIMEOUT);

23                 DnsClient dnsClient = new DnsClient(IPAddress.Parse(dnsAddr), QUERY_TIMEOUT);

24                 //解析域名。将域名请求发送至DNS服务器解析,第一个参数为需要解析的域名,第二个参数为解析类型, RecordType.A为IPV4类型

25                 //DnsMessage dnsMessage = dnsClient.Resolve("sso.zt-express.com", RecordType.A);

26                 DnsMessage dnsMessage = dnsClient.Resolve(domain, RecordType.A);

27                 //若返回结果为空,或者存在错误,则该请求失败。

28                 if (dnsMessage == null || (dnsMessage.ReturnCode != ReturnCode.NoError && dnsMessage.ReturnCode != ReturnCode.NxDomain))

29                 {

30                     // return null;

31                     //Console.WriteLine("没有解析成功");

32                     this.Invoke(new Action(() =>

33                     {

34                         txtResult.Text = "没有解析成功";

35                         btnDNS.Enabled = true;

36                         btnDNS.Text = "解析";

37 

38                     }));

39                 }

40                 else

41                 {

42                     //循环遍历返回结果,将返回的IPV4记录添加到结果集List中。

43                     foreach (DnsRecordBase dnsRecord in dnsMessage.AnswerRecords)

44                     {

45                         ARecord aRecord = dnsRecord as ARecord;

46                         if (aRecord != null)

47                         {

48                             //resultIpList.Add(aRecord.Address.ToString());

49                             //Console.WriteLine(aRecord.Address.ToString());

50                             this.Invoke(new Action(() =>

51                                     {

52                                     txtResult.AppendText(aRecord.Address.ToString() + "\r\n");

53                                 }));

54                         }

55                         else

56                         {

57                             continue;

58                         }

59                     }

60                     this.Invoke(new Action(() =>

61                     {

62                         btnDNS.Enabled = true;

63                         btnDNS.Text = "解析";

64                     }));

65 

66                 }

67 

68             }).Start();

69 

70         }

 

 工具下载地址:http://files.cnblogs.com/files/hnsongbiao/Release.rar

你可能感兴趣的:(dns)