Beispiel #1
0
 public static bool Contains(DnsMessage dnsQMsg, HttpContext context = null)
 {
     return(context == null
         ? MemoryCache.Default.Contains(
                $"DNS:{dnsQMsg.Questions.FirstOrDefault().Name}:{dnsQMsg.Questions.FirstOrDefault().RecordType}")
         : MemoryCache.Default.Contains(
                $"DNS:{GeoIP.GetGeoStr(RealIP.GetFromDns(dnsQMsg, context))}{dnsQMsg.Questions.FirstOrDefault().Name}:{dnsQMsg.Questions.FirstOrDefault().RecordType}"));
 }
Beispiel #2
0
        public static DnsMessage Get(DnsMessage dnsQMessage, HttpContext context = null)
        {
            var dCacheMsg = new DnsMessage
            {
                IsRecursionAllowed = true,
                IsRecursionDesired = true,
                TransactionID      = dnsQMessage.TransactionID
            };
            var getName = context != null
                ? $"DNS:{GeoIP.GetGeoStr(RealIP.GetFromDns(dnsQMessage, context))}{dnsQMessage.Questions.FirstOrDefault().Name}:{dnsQMessage.Questions.FirstOrDefault().RecordType}"
                : $"DNS:{dnsQMessage.Questions.FirstOrDefault().Name}:{dnsQMessage.Questions.FirstOrDefault().RecordType}";
            var cacheEntity = Get(getName);

            foreach (var item in cacheEntity.List)
            {
                if (item is ARecord aRecord)
                {
                    dCacheMsg.AnswerRecords.Add(new ARecord(aRecord.Name,
                                                            Convert.ToInt32((cacheEntity.Time.AddSeconds(item.TimeToLive) - DateTime.Now)
                                                                            .TotalSeconds), aRecord.Address));
                }
                else if (item is AaaaRecord aaaaRecord)
                {
                    dCacheMsg.AnswerRecords.Add(new AaaaRecord(aaaaRecord.Name,
                                                               Convert.ToInt32((cacheEntity.Time.AddSeconds(item.TimeToLive) - DateTime.Now)
                                                                               .TotalSeconds), aaaaRecord.Address));
                }
                else if (item is CNameRecord cNameRecord)
                {
                    dCacheMsg.AnswerRecords.Add(new CNameRecord(cNameRecord.Name,
                                                                Convert.ToInt32((cacheEntity.Time.AddSeconds(item.TimeToLive) - DateTime.Now)
                                                                                .TotalSeconds), cNameRecord.CanonicalName));
                }
                else
                {
                    dCacheMsg.AnswerRecords.Add(item);
                }
            }

            dCacheMsg.Questions.AddRange(dnsQMessage.Questions);
            dCacheMsg.AnswerRecords.Add(new TxtRecord(DomainName.Parse("cache.arashi-msg"), 0,
                                                      cacheEntity.ExpiresTime.ToString("r")));
            return(dCacheMsg);
        }
Beispiel #3
0
        public static DnsMessage Get(DnsMessage dnsQMessage, HttpContext context = null)
        {
            var dCacheMsg = new DnsMessage
            {
                IsRecursionAllowed = true,
                IsRecursionDesired = true,
                TransactionID      = dnsQMessage.TransactionID
            };

            if (context != null)
            {
                dCacheMsg.AnswerRecords.AddRange(Get(
                                                     $"{GeoIP.GetGeoStr(RealIP.GetFromDns(dnsQMessage, context))}{dnsQMessage.Questions.FirstOrDefault().Name}:{dnsQMessage.Questions.FirstOrDefault().RecordType}"));
            }
            else
            {
                dCacheMsg.AnswerRecords.AddRange(Get(
                                                     $"{dnsQMessage.Questions.FirstOrDefault().Name}:{dnsQMessage.Questions.FirstOrDefault().RecordType}"));
            }
            dCacheMsg.Questions.AddRange(dnsQMessage.Questions);
            dCacheMsg.AnswerRecords.Add(new TxtRecord(DomainName.Parse("cache.doh.pp.ua"), 0,
                                                      "ArashiDNS.P Cached"));
            return(dCacheMsg);
        }