• DNS解析代码copy


    临时备忘

    View Code
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using ARSoft.Tools.Net.Dns;
    using System.Net;
    using System.Diagnostics;
    namespace UseT
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Trace.TraceError("xxx");
                var dnsServerIp = IPAddress.Parse("192.168.1.30");
                DnsClient dsnClient = new DnsClient(dnsServerIp, 3000);
                Stopwatch sw = new Stopwatch();
                sw.Start();
                Console.WriteLine("--------响应----------");
                var r = dsnClient.Resolve(textBox1.Text);
                if (r != null)
                {
                    foreach (var it in r.AnswerRecords)
                    {
                        var ar = it as ARecord;
                        if (ar != null)
                            Console.WriteLine(ar.Address.ToString());
                    }
                }
                sw.Stop();
                Console.WriteLine(sw.ElapsedMilliseconds);
    
              
            }
    
            private DnsServer Server { get; set; }
            private void button2_Click(object sender, EventArgs e)
            {
                DnsServer dnsServer = new DnsServer(10,10,ProcessQuery);
                Server = dnsServer;
                dnsServer.Start();
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                if (Server != null) Server.Stop();
            }
            private static Lazy<DnsClient> LazyClient = new Lazy<DnsClient>(()=>DnsClient.Default, true);
    
            private static DnsMessageBase ProcessQuery(DnsMessageBase message, IPAddress clientAddress, System.Net.Sockets.ProtocolType protocol)
            {
                
                message.IsQuery = false;
                DnsMessage query = message as DnsMessage;
    
                // 官方的样例文档中没有体现DNS请求发起者的IP,我在这里增加了。
                Console.WriteLine("Client Address:{0}", clientAddress.ToString());
                Console.WriteLine("query.Questions.Count:{0}", query.Questions.Count);
                Console.WriteLine("query.Questions.ToString():{0}", query.Questions.ToString());
                Console.WriteLine("query.Questions[0].ToString():{0}", query.Questions[0].ToString());
                Console.WriteLine("query.Questions[0].GetType():{0}", query.Questions[0].GetType().ToString());
                Console.WriteLine("query.Questions[0].Name:{0}", query.Questions[0].Name.ToString());
                Console.WriteLine("query.Questions[0].RecordType:{0}", query.Questions[0].RecordType.ToString());
                Console.WriteLine("query.Questions[0].RecordClass {0}", query.Questions[0].RecordClass.ToString());
    
                //加入自己的解析
                if (query.Questions[0].Name.Contains("xxx"))
                {
    
                    query.AnswerRecords.Add(new ARecord("", 3600, IPAddress.Parse("192.168.1.94")));
                    message.ReturnCode = ReturnCode.NoError;
                    return message;
    
                }
                else
                {
    
                    var r= LazyClient.Value.Resolve(query.Questions[0].Name);
                    if (r != null)
                    {
                        foreach (var it in r.AnswerRecords)
                        {
                            var ar = it as ARecord;
                            if (ar != null)
                            {
                                query.AnswerRecords.Add(ar);
                            }
                               
                        }
                        message.ReturnCode = ReturnCode.NoError;
                    }
                    return message;
    
                }
            }
    
        }
    }
  • 相关阅读:
    postman是如何使用的?
    PHPstudy如何在本地搭建多站点
    2017 电影推荐
    MySQL 约束、表连接、表关联、索引
    MySQL 基本语句(1)
    MySQL 数据类型
    Python3 基础
    【LOJ】 #2665. 「NOI2013」树的计数
    【LOJ】#2244. 「NOI2014」起床困难综合症
    【51nod】1251 Fox序列的数量
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3015992.html
Copyright © 2020-2023  润新知