public void SwitchContext(Context x)
    {
        //currentContext.currentState = currentState;
        currentContext.e = e;
        //currentContext.initiationSetMembers = initiationSetMembers;
        //currentContext.initiationSets = initiationSets;
        currentContext.m_optsLearned   = m_optsLearned;
        currentContext.Model           = Model;
        currentContext.Q               = Q;
        currentContext.SubgoalCounts   = SubgoalCounts;
        currentContext.Subgoals        = Subgoals;
        currentContext.EpsilonDiscount = discount;

        //currentState = x.currentState;
        e = x.e;
        //initiationSetMembers = x.initiationSetMembers;
        //initiationSets = x.initiationSets;
        m_optsLearned = x.m_optsLearned;
        Model         = x.Model;
        Q             = x.Q;
        SubgoalCounts = x.SubgoalCounts;
        Subgoals      = x.Subgoals;
        discount      = x.EpsilonDiscount;

        currentContext = x;
    }
示例#2
0
    public void AddQuest(int NPC, int dialogue_in,int dialogue_change, string requirement, string changeBool, string requiredItem, string questName,List<int>timeBlocks)
    {
        QClass temporary;
            temporary = new QClass(NPC, dialogue_in, dialogue_change, requirement, changeBool,requiredItem,questName,timeBlocks);

            Qlist.Add(temporary);
    }
示例#3
0
 /// <summary>
 /// 根据类别获得所有逇考试题目
 /// </summary>
 /// <param name="qClass"></param>
 /// <returns></returns>
 public List <ExamModel> GetAllExamModelsByQ(QClass qClass)
 {
     return(DataContext.examModels
            .Where(p => p.QClassId == qClass.Id)
            .Include(p => p.QClass)
            .ToList());
 }
示例#4
0
        /// <summary>
        /// 添加题目类型
        /// </summary>
        /// <param name="qClass"></param>
        /// <returns></returns>
        public async Task <QClass> AddQClass(QClass qClass)
        {
            DataContext.qClasses.Add(qClass);
            await DataContext.SaveChangesAsync();

            return(qClass);
        }
示例#5
0
 protected Resource(string name, QType type, QClass qClass, uint ttl, ushort length, string data)
 {
     Name   = name;
     Type   = type;
     Class  = qClass;
     Ttl    = ttl;
     Length = length;
     Data   = data;
 }
 public Agent(int startState, Environment env)
 {
     environment    = env;
     currentState   = 0; //env.CurrentState olacak!!!!!!!!!!!!!!!!!!
     Q              = new QClass(this, m_DisableOptions);
     currentContext = Context.NewContext(this, DisableOptions, currentState);
     contexts.Add(currentContext);
     SwitchContext(currentContext);
 }
示例#7
0
        public mDNSQuestion(Byte[] data, int offset)
        {
            int idx = offset;

            name    = mDNSPacket.ReadName(data, ref idx);
            QType   = (QType)mDNSPacket.ReadUInt16(data, idx);
            QClass  = (QClass)mDNSPacket.ReadUInt16(data, (idx + 2));
            ByteLen = ((idx + 4) - offset);
        }
示例#8
0
        public Question(string qName, QType qType, QClass qClass = QClass.IN)
        {
            if (!IsValidDomainName(qName))
            {
                throw new FormatException($"The domain name {qName} entered for QName is invalid!");
            }

            QName  = qName;
            QType  = qType;
            QClass = qClass;
        }
        public IActionResult AddQClass([FromForm] QClass qClass)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError(string.Empty, "类型添加错误");
                return(View(qClass));
            }
            _ExamService.AddQClass(qClass);

            return(RedirectToAction(nameof(Index)));
        }
示例#10
0
 public bool DeleteQClass(int id)
 {
     try
     {
         QClass u = db.QClasses.Single(p => p.idQClass == id);
         db.QClasses.Remove(u);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
        public ActionResult Create(QClass sub)
        {
            bool idclass = false;
            if (ModelState.IsValid)
            {
                var dao = new QClassDAO();
                Guid id = new SubjectDAO().GetListAll().Where(i => i.idSub == sub.idQClass).Select(l => l.SubjectID).SingleOrDefault();
                sub.SubjectID = id;
                sub.ClassID = Guid.NewGuid();
                idclass = dao.AddQClass(sub);
            }

            return Json(idclass, JsonRequestBehavior.AllowGet);
        }
示例#12
0
        /// <summary>
        /// Do Query on specified DNS servers
        /// </summary>
        /// <param name="name">Name to query</param>
        /// <param name="qtype">Question type</param>
        /// <param name="timeout">Timeout for lookup in seconds.</param>
        /// <param name="qclass">Class type</param>
        /// <returns>Response of the query</returns>
        public DNSResponse Query(string name, QType qtype, QClass qclass, int timeout)
        {
            Question    question = new Question(name, qtype, qclass);
            DNSResponse response = SearchInCache(question);

            if (response != null)
            {
                return(response);
            }

            DNSRequest request = new DNSRequest();

            request.AddQuestion(question);
            return(GetResponse(request, m_DnsServers, timeout));
        }
示例#13
0
        public IList <string> CertRecords(string name)
        {
            IList <string> records = new List <string>();
            const QType    qType   = QType.CERT;
            const QClass   qClass  = QClass.IN;

            Response response = _resolver.Query(name, qType, qClass);

            foreach (RecordCERT record in response.RecordsCERT)
            {
                records.Add(record.ToString());
            }

            return(records);
        }
示例#14
0
        /// <summary>
        /// Do Query on specified DNS servers
        /// </summary>
        /// <param name="name">Name to query</param>
        /// <param name="qtype">Question type</param>
        /// <param name="qclass">Class type</param>
        /// <returns>Response of the query</returns>
        public Response Query(string name, QType qtype, QClass qclass)
        {
            Question question = new Question(name, qtype, qclass);
            Response response = SearchInCache(question);

            if (response != null)
            {
                return(response);
            }

            Request request = new Request();

            request.AddQuestion(question);
            return(GetResponse(request));
        }
示例#15
0
 public bool AddQClass(QClass PQ)
 {
     try
     {
         if (PQ.ChuThich == null)
         {
             PQ.ChuThich = "Module mới";
         }
         object[] valparams =
         {
             new SqlParameter("@ClassID",   PQ.ClassID),
             new SqlParameter("@SubjectID", PQ.SubjectID),
             new SqlParameter("@Descr",     PQ.Descr),
             new SqlParameter("@ClassNbr",  PQ.ClassNbr),
             new SqlParameter("@ChuThich",  PQ.ChuThich),
             new SqlParameter("@TrangThai", PQ.TrangThai)
         };
         int res = db.Database.ExecuteSqlCommand("Insert_module @ClassID, @SubjectID, @ClassNbr, @Descr, @ChuThich, @TrangThai", valparams);
         db.SaveChanges();
         if (res == 1)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     catch (DbEntityValidationException e)
     {
         foreach (var eve in e.EntityValidationErrors)
         {
             Debug.WriteLine("- Entity of type \"{0}\", in state \"{1}\" has the following validation errors: ", eve.Entry.Entity.GetType().Name, eve.Entry.State);
             foreach (var ve in eve.ValidationErrors)
             {
                 Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage);
             }
         }
         return(false);
     }
     catch (Exception e)
     {
         Debug.WriteLine(e.Message);
         return(false);
     }
 }
示例#16
0
 public bool UpdateQClass(QClass PQ)
 {
     try
     {
         QClass u = db.QClasses.Where(p => p.idQClass == PQ.idQClass).SingleOrDefault();
         u.SubjectID = PQ.SubjectID;
         u.ClassNbr  = PQ.ClassNbr;
         u.Descr     = PQ.Descr;
         u.ChuThich  = PQ.ChuThich;
         u.TrangThai = PQ.TrangThai;
         db.SaveChanges();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
示例#17
0
        static void Main(string[] args)
        {
            try
            {
                Console.Title = "CLIENT";
                var address = new Uri("http://localhost:64133/IContract");
                var binding = new BasicHttpBinding();

                var endpoint = new EndpointAddress(address);

                ChannelFactory <IContract> factory = new ChannelFactory <IContract>(binding, endpoint);

                var channel = factory.CreateChannel();

                QClass[]      arr  = new QClass[50];
                List <string> strs = new List <string>();
                var           rnd  = new Random();

                for (var i = 0; i < arr.Length; i++)
                {
                    arr[i] = new QClass(i + 1, RandomString(3), RandomString(3));
                    var serializedObj = SerializeObj(arr[i], arr[i].GetType());
                    var msg           = new QMessage
                    {
                        Obj = serializedObj
                    };
                    var t = arr[i].GetType();
                    msg.ClassName = t.Namespace + "." + t.Name;
                    strs.Add("Query_" + Convert.ToString(rnd.Next(3) + 1) + SerializeObj(msg, msg.GetType()));
                    channel.AddMessage(strs[i]);
                }
                channel.RemoveMessage(strs[9]);

                channel.RestoreQuery();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadKey();
            }
        }
        public ActionResult Edit(QClass sub)
        {
            bool kq = false;
            if (ModelState.IsValid)
            {
                var dao = new QClassDAO();

                if (dao.UpdateQClass(sub))
                {
                    kq = true;
                }
                else
                {
                    kq = false;
                }
            }

            return Json(kq, JsonRequestBehavior.AllowGet);
        }
示例#19
0
        public Response Query(string hostName, QType type, QClass @class)
        {
            if (String.IsNullOrWhiteSpace(hostName))
            {
                throw new ArgumentException("Invalid host name", "hostName");
            }

            var question = new Question(hostName, type, @class);
            var response = FindResponse(question);

            if (response != null)
            {
                return(response);
            }

            var request = new Request();

            request.AddQuestion(question);
            response = GetResponse(request);
            return(response);
        }
示例#20
0
        /// <summary>
        /// Performs a Trace on query
        /// </summary>
        /// <param name="name"></param>
        /// <param name="qtype"></param>
        /// <param name="qclass"></param>
        public void Trace(string name, QType qtype, QClass qclass)
        {
            Message("; <<>> DigTrace.Net {0} <<>> @{1} {2} {3}", resolver.Version, resolver.DnsServer, qtype, name);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            Message(";; Loading Root nameservers");
            var rootaddresses = resolver.LoadRootFile();

            foreach (var ra in rootaddresses)
            {
                //Message(";; Asking {0} ({1}) for nameserver for {2} ", ra.Key, ra.Value, name);
                var nsaddress = TraceNameservers(name, ra, qtype, qclass, true);
                if (nsaddress != null)
                {
                    Message(";; Using {0} as nameserver for {1}", nsaddress, name);
                    resolver.DnsServer = nsaddress.ToString();
                    break;
                }
            }

            Response response = resolver.Query(name, qtype, qclass);

            sw.Stop();

            if (response.Error != "")
            {
                Message(";; " + response.Error);
                return;
            }

            PrintAnswer(response);

            Message(";; Query time: {0} msec", sw.ElapsedMilliseconds);
            Message(";; SERVER: {0}#{1}({2})", response.Server.Address, response.Server.Port, response.Server.Address);
            Message(";; WHEN: " + response.TimeStamp.ToString("ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture));
            Message(";; MSG SIZE rcvd: " + response.MessageSize);
        }
示例#21
0
        /// <summary>
        /// Will parse resource data (DNS Answers) into IResource. The concrete type will be the answer type eg. MX = MxRecord Type
        /// </summary>
        /// <param name="data"></param>
        /// <param name="receiveDnsPacket"></param>
        /// <returns></returns>
        public static IEnumerable <IResource> Parse(byte[] data, ReceiveDnsPacket receiveDnsPacket)
        {
            IResource[] resources = new IResource[receiveDnsPacket.Header.AnswersCounts];
            int         position  = receiveDnsPacket.ToBytes().Length;

            for (var i = 0; i < receiveDnsPacket.Header.AnswersCounts; i++)
            {
                var walkedHostname = GetRecordName(ref data, position);

                string name         = walkedHostname.hostname.ToString();
                QType  type         = (QType)Enum.Parse(typeof(QType), ((int)data[walkedHostname.pos + 1]).ToString());
                QClass qClass       = (QClass)Enum.Parse(typeof(QClass), ((int)data[walkedHostname.pos + 3]).ToString());
                uint   ttl          = BitConverter.ToUInt16(new[] { data[walkedHostname.pos + 5], data[walkedHostname.pos + 6], data[walkedHostname.pos + 7], data[walkedHostname.pos + 8] }, 0);
                ushort length       = data[walkedHostname.pos + 9];
                var    resourceData = ReadAnswer(ref data, walkedHostname.pos + 10, new Resource(name, type, qClass, ttl, length, null));

                position     = walkedHostname.pos + 10 + length;
                resources[i] = resourceData;
            }

            return(resources);
        }
示例#22
0
        /// <summary>
        /// Dig a query
        /// </summary>
        /// <param name="name"></param>
        /// <param name="qtype"></param>
        /// <param name="qclass"></param>
        public void DigIt(string name, QType qtype, QClass qclass)
        {
            Message("; <<>> Dig.Net {0} <<>> @{1} {2} {3}", resolver.Version, resolver.DnsServer, qtype, name);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            Response response = resolver.Query(name, qtype, qclass);

            sw.Stop();

            if (response.Error != "")
            {
                Message(";; " + response.Error);
                return;
            }

            PrintAnswer(response);

            Message(";; Query time: {0} msec", sw.ElapsedMilliseconds);
            Message(";; SERVER: {0}#{1}({2})", response.Server.Address, response.Server.Port, response.Server.Address);
            Message(";; WHEN: " + response.TimeStamp.ToString("ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture));
            Message(";; MSG SIZE rcvd: " + response.MessageSize);
        }
示例#23
0
 /// <summary>
 /// 删除类
 /// </summary>
 /// <param name="qClass"></param>
 public void DeleteQClass(QClass qClass)
 {
     DataContext.qClasses.Remove(qClass);
     DataContext.SaveChanges();
 }
示例#24
0
        public Response Query(string hostName, QType type, QClass @class)
        {
            if (String.IsNullOrWhiteSpace(hostName))
            {
                throw new ArgumentException("Invalid host name", "hostName");
            }

            var question = new Question(hostName, type, @class);
            var response = FindResponse(question);
            if (response != null)
            {
                return response;
            }

            var request = new Request();
            request.AddQuestion(question);
            response = GetResponse(request);
            return response;
        }
示例#25
0
		public Question(RecordReader rr)
		{
			QName = rr.ReadDomainName();
            QType = (DNSQType)rr.ReadShort();
			QClass = (QClass)rr.ReadShort();
		}
示例#26
0
        /// <summary>
        /// Do Query on specified DNS servers
        /// </summary>
        /// <param name="name">Name to query</param>
        /// <param name="qtype">Question type</param>
        /// <param name="qclass">Class type</param>
        /// <returns>Response of the query</returns>
        public Response Query(string name, QType qtype, QClass qclass)
        {
            Question question = new Question(name, qtype, qclass);
            Response response = SearchInCache(question);
            if (response != null)
                return response;

            Request request = new Request();
            request.AddQuestion(question);
            return GetResponse(request);
        }
示例#27
0
 public Question(string QName,QType QType,QClass QClass)
 {
     this.QName = QName;
     this.QType = QType;
     this.QClass = QClass;
 }
示例#28
0
 public Question(string QName, DNSQType QType, QClass QClass)
 {
     this.QName  = QName;
     this.QType  = QType;
     this.QClass = QClass;
 }
示例#29
0
 ///<summary>
 ///</summary>
 ///<param name="qName"></param>
 ///<param name="qType"></param>
 ///<param name="qClass"></param>
 public Question(string qName, QType qType, QClass qClass)
 {
     QName  = qName;
     QType  = qType;
     QClass = qClass;
 }
示例#30
0
 /// <summary>
 /// Do an QClass=IN Query on the previously cached results.
 /// </summary>
 /// <param name="name">Name to query</param>
 /// <param name="qtype">Question type</param>
 /// <returns>Response of the query</returns>
 public DNSResponse QueryCache(string name, DNSQType qtype, QClass qclass)
 {
     Question question = new Question(name, qtype, qclass);
     return SearchInCache(question);
 }
示例#31
0
 /// <summary>
 /// Starts a Dig operation
 /// </summary>
 /// <param name="name"></param>
 /// <param name="qtype"></param>
 /// <param name="qclass"></param>
 public void BeginDigIt(string name, QType qtype, QClass qclass)
 {
     DigItDelegate d = new DigItDelegate(DigIt);
     d.BeginInvoke(name, qtype, qclass, null, null);
 }
示例#32
0
        /// <summary>
        /// Performs a Trace on query
        /// </summary>
        /// <param name="name"></param>
        /// <param name="qtype"></param>
        /// <param name="qclass"></param>
        public void Trace(string name, QType qtype, QClass qclass)
        {
            Message("; <<>> DigTrace.Net {0} <<>> @{1} {2} {3}", resolver.Version, resolver.DnsServer, qtype, name);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            Message(";; Loading Root nameservers");
            var rootaddresses = resolver.LoadRootFile();

            foreach(var ra in rootaddresses)
            {
                //Message(";; Asking {0} ({1}) for nameserver for {2} ", ra.Key, ra.Value, name);
                var nsaddress = TraceNameservers(name, ra,qtype, qclass, true);
                if (nsaddress != null)
                {
                    Message(";; Using {0} as nameserver for {1}", nsaddress, name);
                    resolver.DnsServer = nsaddress.ToString();
                    break;
                }

            }

            Response response = resolver.Query(name, qtype, qclass);
            sw.Stop();

            if (response.Error != "")
            {
                Message(";; " + response.Error);
                return;
            }

            PrintAnswer(response);

            Message(";; Query time: {0} msec", sw.ElapsedMilliseconds);
            Message(";; SERVER: {0}#{1}({2})", response.Server.Address, response.Server.Port, response.Server.Address);
            Message(";; WHEN: " + response.TimeStamp.ToString("ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture));
            Message(";; MSG SIZE rcvd: " + response.MessageSize);
        }
示例#33
0
        /// <summary>
        /// Dig a query
        /// </summary>
        /// <param name="name"></param>
        /// <param name="qtype"></param>
        /// <param name="qclass"></param>
        public void DigIt(string name, QType qtype, QClass qclass)
        {
            Message("; <<>> Dig.Net {0} <<>> @{1} {2} {3}", resolver.Version, resolver.DnsServer, qtype, name);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            Response response = resolver.Query(name, qtype, qclass);
            sw.Stop();

            if (response.Error != "")
            {
                Message(";; " + response.Error);
                return;
            }

            PrintAnswer(response);

            Message(";; Query time: {0} msec", sw.ElapsedMilliseconds);
            Message(";; SERVER: {0}#{1}({2})", response.Server.Address, response.Server.Port, response.Server.Address);
            Message(";; WHEN: " + response.TimeStamp.ToString("ddd MMM dd HH:mm:ss yyyy", CultureInfo.InvariantCulture));
            Message(";; MSG SIZE rcvd: " + response.MessageSize);
        }
示例#34
0
        /// <summary>
        /// Do Query on specified DNS servers
        /// </summary>
        /// <param name="name">Name to query</param>
        /// <param name="qtype">Question type</param>
        /// <param name="timeout">Timeout for lookup in seconds.</param>
        /// <param name="qclass">Class type</param>
        /// <returns>Response of the query</returns>
        public DNSResponse Query(string name, DNSQType qtype, QClass qclass, int timeout)
        {
            Question question = new Question(name, qtype, qclass);
            DNSResponse response = SearchInCache(question);
            if (response != null)
                return response;

            DNSRequest request = new DNSRequest();
            request.AddQuestion(question);
            return GetResponse(request, m_DnsServers, timeout);
        }
示例#35
0
文件: Question.cs 项目: sstraus/xmpp
 ///<summary>
 ///</summary>
 ///<param name="qName"></param>
 ///<param name="qType"></param>
 ///<param name="qClass"></param>
 public Question(string qName, QType qType, QClass qClass)
 {
     QName = qName;
     QType = qType;
     QClass = qClass;
 }
示例#36
0
 /// <summary>
 /// .ctor using record (from response)
 /// </summary>
 /// <param name="rr"></param>
 public Question(RecordReader rr)
 {
     QName  = rr.ReadDomainName();
     QType  = (QType)rr.ReadUInt16();
     QClass = (QClass)rr.ReadUInt16();
 }
示例#37
0
        public void BeginDigIt(string name, QType qtype, QClass qclass)
        {
            DigItDelegate d = new DigItDelegate(DigIt);

            d.BeginInvoke(name, qtype, qclass, null, null);
        }
示例#38
0
 public Question(RecordReader rr)
 {
     QName  = rr.ReadDomainName();
     QType  = (DNSQType)rr.ReadShort();
     QClass = (QClass)rr.ReadShort();
 }
示例#39
0
        /// <summary>
        /// Do an QClass=IN Query on the previously cached results.
        /// </summary>
        /// <param name="name">Name to query</param>
        /// <param name="qtype">Question type</param>
        /// <returns>Response of the query</returns>
        public DNSResponse QueryCache(string name, QType qtype, QClass qclass)
        {
            Question question = new Question(name, qtype, qclass);

            return(SearchInCache(question));
        }
示例#40
0
 public Question(RecordReader rr)
 {
     QName = rr.ReadDomainName();
     QType = (QType)rr.ReadUInt16();
     QClass = (QClass)rr.ReadUInt16();
 }
示例#41
0
 /// <summary>
 /// 修改类别
 /// </summary>
 /// <param name="qClass">题目类</param>
 public void EditQClass(QClass qClass)
 {
     DataContext.qClasses.Attach(qClass);
     DataContext.SaveChanges();
 }
示例#42
0
        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);
        }
示例#43
0
		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);
		}
示例#44
0
        /// <summary>
        /// Recursive tracing of nameservers
        /// </summary>
        /// <param name="name"></param>
        /// <param name="parentNameserver"></param>
        /// <param name="qtype"></param>
        /// <param name="qclass"></param>
        /// <param name="firstOnly"></param>
        /// <returns></returns>
        private IPAddress TraceNameservers(string name, KeyValuePair<string, IPAddress> parentNameserver, QType qtype, QClass qclass, bool firstOnly)
        {
            Message(";; Asking {0} ({1}) for nameserver of {2} ", parentNameserver.Key, parentNameserver.Value, name);
            resolver.DnsServer = parentNameserver.Value.ToString();

            //preserving cache flag
            var saveuseCache = resolver.UseCache;
            resolver.UseCache = false;

            //performing a nameserver search
            Response nsresponse = resolver.Query(name, QType.NS, QClass.IN);

            //performing the requested search
            Response qresponse = resolver.Query(name, qtype, qclass);

            resolver.UseCache = saveuseCache;

            //sorting answers
            List<RecordNS> nameservers = new List<RecordNS>();
            List<RecordA> nameserveraddresses = new List<RecordA>();
            List<RecordAAAA> nameserveraddresV6 = new List<RecordAAAA>();

            foreach (var ans in nsresponse.Answers)
                SortAnswers(nameservers, nameserveraddresses, nameserveraddresV6, ans.RECORD);

            foreach (var ans in nsresponse.Authorities)
                SortAnswers(nameservers, nameserveraddresses, nameserveraddresV6, ans.RECORD);

            foreach (var ans in nsresponse.Additionals)
                SortAnswers(nameservers, nameserveraddresses, nameserveraddresV6, ans.RECORD);

            foreach (var ans in qresponse.Answers)
                SortAnswers(nameservers, nameserveraddresses, nameserveraddresV6, ans.RECORD);

            foreach (var ans in qresponse.Authorities)
                SortAnswers(nameservers, nameserveraddresses, nameserveraddresV6, ans.RECORD);

            foreach (var ans in qresponse.Additionals)
                SortAnswers(nameservers, nameserveraddresses, nameserveraddresV6, ans.RECORD);

            //if one of the nameservers is the calling nameserver, we've reached the end, return the IP of this nameserver
            //if there are answers (from the requested query) - we have the name server
            //if there are no more child nameservers - we reached the end, return the nameserver we did find and attempt a query on it.
            if ((nameservers.FirstOrDefault(i => i.NSDNAME == parentNameserver.Key) != null) || (qresponse.Answers.Count > 0) || (nameservers.Count == 0))
                return parentNameserver.Value;

            foreach (var ns in nameservers)
            {
                string nsname = ns.NSDNAME;
                var nsaddress = nameserveraddresses.Where(nsa => nsa.RR.NAME == nsname).Select(nsa=>nsa.Address).FirstOrDefault();
                if (nsaddress == null)
                    nsaddress = nameserveraddresV6.Where(nsa => nsa.RR.NAME == nsname).Select(nsa=>nsa.Address).FirstOrDefault();
                if (nsaddress == null)
                {
                    Message(";; nameserver {0} did not provide an address, attempting to resolve.",nsname);
                    //continue;
                    var hostentry = Dns.GetHostEntry(nsname);
                    if ((hostentry != null) && (hostentry.AddressList.Length > 0))
                    {
                        nsaddress = hostentry.AddressList[0];
                        Message(";; nameserver {0} extrnally resolved to {1}", nsname,nsaddress);

                    }
                    else
                    {
                        Message(";; nameserver {0} doesn't have an address and failed to resolve, skipping.", nsname);
                        continue;
                    }

                }
                var childns = TraceNameservers(name, new KeyValuePair<string, IPAddress>(nsname, nsaddress),qtype,qclass, firstOnly);

                if (childns != null)
                {
                    //reached the last NS.
                    return childns;
                }

            }
            return null;
        }
示例#45
0
			public QuerySet(string Name, QType Type, QClass Class)
			{
				this.Name = Name;
				this.Type = Type;
				this.Class = Class;
			}