DNSEntity CheckRecord(DNSEntity dns) { var rq = dns.Questions[0]; var list = Record.FindAllByQueryTypeAndName((Int32)rq.Type, rq.Name); if (list == null || list.Count == 0) { return(null); } var rs = new DNSEntity(); rs.Questions = dns.Questions; var drs = new List <DNSRecord>(); var now = DateTime.Now; foreach (var item in list) { if (item.QueryType <= 0) { continue; } var dr = DNSEntity.CreateRecord((DNSQueryType)item.QueryType); dr.Name = item.Name; dr.Text = item.Address; // 生产时间过期,并且最后更新时间也过期,才去更新 if (item.TTL < now && item.Next < now) { // 生存时间3分钟 dr.TTL = new TimeSpan(0, 3, 0); // 更新数据库记录,3分钟内不要再次去找 item.Next = now.AddMinutes(3); item.Hits++; item.SaveAsync(); } else { dr.TTL = item.TTL - now; if (dr.TTL.TotalSeconds < 60) { dr.TTL = new TimeSpan(0, 10, 0); } drs.Add(dr); } } // 没有任何满足条件的返回,让它去更新吧 if (drs.Count < 1) { return(null); } rs.Answers = drs.ToArray(); return(rs); }
DNSEntity CheckRule(DNSEntity dns) { var rq = dns.Questions[0]; var list = Rule.FindAllByQueryTypeAndName((Int32)rq.Type, rq.Name); if (list == null || list.Count == 0) { return(null); } var rs = new DNSEntity(); rs.Questions = dns.Questions; var drs = new List <DNSRecord>(); foreach (var item in list) { if (item.QueryType <= 0) { continue; } var r = DNSEntity.CreateRecord((DNSQueryType)item.QueryType); r.Name = item.Name; if (r.Name[0] == '*') { r.Name = r.Name.Substring(1); } if (r.Name[0] == '.') { r.Name = r.Name.Substring(1); } r.Text = item.Address; // 生存时间3分钟 r.TTL = new TimeSpan(0, 3, 0); drs.Add(r); item.Hits++; item.SaveAsync(); } rs.Answers = drs.ToArray(); return(rs); }