C#实现DNS解析服务

发布时间:2019-06-07编辑:佚名阅读(2080)

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

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

使用该接口可轻松实现DNS客户请求端及服务器解析端。

工具的主要代码:

private void btnDNS_Click(object sender, EventArgs e)
        {
            int QUERY_TIMEOUT = 10000;
            string domain = txtDomain.Text;
            string dnsAddr = txtDNSAddr.Text;
            txtResult.Clear();
            btnDNS.Enabled = false;
            btnDNS.Text = "正在解析...";
            new Thread(() =>
            {
                if (string.IsNullOrWhiteSpace(domain))
                {
                    MessageBox.Show("待解析的域名不可为空");
                    return;
                }
                if (string.IsNullOrWhiteSpace(dnsAddr))
                {
                    MessageBox.Show("DNS地址不可为空");
                    return;
                }
                //初始化DnsClient,第一个参数为DNS服务器的IP,第二个参数为超时时间
                //DnsClient dnsClient = new DnsClient(IPAddress.Parse("8.8.8.8"), QUERY_TIMEOUT);
                DnsClient dnsClient = new DnsClient(IPAddress.Parse(dnsAddr), QUERY_TIMEOUT);
                //解析域名。将域名请求发送至DNS服务器解析,第一个参数为需要解析的域名,第二个参数为解析类型, RecordType.A为IPV4类型
                //DnsMessage dnsMessage = dnsClient.Resolve("sso.zt-express.com", RecordType.A);
                DnsMessage dnsMessage = dnsClient.Resolve(domain, RecordType.A);
                //若返回结果为空,或者存在错误,则该请求失败。
                if (dnsMessage == null || (dnsMessage.ReturnCode != ReturnCode.NoError && dnsMessage.ReturnCode != ReturnCode.NxDomain))
                {
                    // return null;
                    //Console.WriteLine("没有解析成功");
                    this.Invoke(new Action(() =>
                    {
                        txtResult.Text = "没有解析成功";
                        btnDNS.Enabled = true;
                        btnDNS.Text = "解析";
                    }));
                }
                else
                {
                    //循环遍历返回结果,将返回的IPV4记录添加到结果集List中。
                    foreach (DnsRecordBase dnsRecord in dnsMessage.AnswerRecords)
                    {
                        ARecord aRecord = dnsRecord as ARecord;
                        if (aRecord != null)
                        {
                            //resultIpList.Add(aRecord.Address.ToString());
                            //Console.WriteLine(aRecord.Address.ToString());
                            this.Invoke(new Action(() =>
                                    {
                                    txtResult.AppendText(aRecord.Address.ToString() + "\r\n");
                                }));
                        }
                        else
                        {
                            continue;
                        }
                    }
                    this.Invoke(new Action(() =>
                    {
                        btnDNS.Enabled = true;
                        btnDNS.Text = "解析";
                    }));
                }
            }).Start();
        }


    关键字: C# DNS解析 服务


鼓掌

2

正能量

0

0

呵呵

0


评论区