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; }
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); }
/// <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()); }
/// <summary> /// 添加题目类型 /// </summary> /// <param name="qClass"></param> /// <returns></returns> public async Task <QClass> AddQClass(QClass qClass) { DataContext.qClasses.Add(qClass); await DataContext.SaveChangesAsync(); return(qClass); }
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); }
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); }
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))); }
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); }
/// <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)); }
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); }
/// <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)); }
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); } }
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); } }
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); }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// 删除类 /// </summary> /// <param name="qClass"></param> public void DeleteQClass(QClass qClass) { DataContext.qClasses.Remove(qClass); DataContext.SaveChanges(); }
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; }
public Question(RecordReader rr) { QName = rr.ReadDomainName(); QType = (DNSQType)rr.ReadShort(); QClass = (QClass)rr.ReadShort(); }
/// <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); }
public Question(string QName,QType QType,QClass QClass) { this.QName = QName; this.QType = QType; this.QClass = QClass; }
public Question(string QName, DNSQType QType, QClass QClass) { this.QName = QName; this.QType = QType; this.QClass = QClass; }
///<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; }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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(); }
public void BeginDigIt(string name, QType qtype, QClass qclass) { DigItDelegate d = new DigItDelegate(DigIt); d.BeginInvoke(name, qtype, qclass, null, null); }
/// <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)); }
public Question(RecordReader rr) { QName = rr.ReadDomainName(); QType = (QType)rr.ReadUInt16(); QClass = (QClass)rr.ReadUInt16(); }
/// <summary> /// 修改类别 /// </summary> /// <param name="qClass">题目类</param> public void EditQClass(QClass qClass) { DataContext.qClasses.Attach(qClass); DataContext.SaveChanges(); }
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); }
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); }
/// <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; }
public QuerySet(string Name, QType Type, QClass Class) { this.Name = Name; this.Type = Type; this.Class = Class; }