zoukankan      html  css  js  c++  java
  • 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;
    
                }
            }
    
        }
    }
  • 相关阅读:
    [CF846E]Chemistry in Berland题解
    [CF846D]Monitor题解
    [CF846B]Math Show题解
    [CF846A]Curriculum Vitae题解
    斜率优化 学习笔记
    【CF115E】Linear Kingdom Races 题解(线段树优化DP)
    【洛谷P3802】小魔女帕琪 题解(概率期望)
    7月13日考试 题解(DFS序+期望+线段树优化建图)
    【BZOJ1426】收集邮票 题解 (期望)
    【HNOI2010】弹飞绵羊 题解(分块)
  • 原文地址:https://www.cnblogs.com/wdfrog/p/3015992.html
Copyright © 2011-2022 走看看