示例#1
0
        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);
        }
示例#2
0
        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);
        }