Exemplo n.º 1
0
 public DnsEntry FindDnsEntryWithWildcard(IUnitOfWork uow, DnsRequest dnsRequest)
 {
     return Mapper.Map<Core.Models.DnsEntry>(uow.Db.FirstOrDefault<SQL.Models.DnsEntry>(
         new Sql()
             .Append("SELECT * FROM dns_entries dnsEntry")
             .Append("WHERE @name LIKE dnsEntry.Name", new { name = dnsRequest.Name })
             .Append("AND dnsEntry.Type = @type", new { type = dnsRequest.Type })
         ));
 }
Exemplo n.º 2
0
 public void Should_Not_Resolve_Dns_Query_Because_No_Entry_Matches()
 {
     var dnsEntriesRepository = Mock.Of<IDnsEntriesRepository>();
     var unitOfWorkProvider = Mock.Of<IUnitOfWorkProvider>();
     IDnsResolver resolver = new DnsResolver(dnsEntriesRepository, unitOfWorkProvider);
     DnsRequest dnsRequest = new DnsRequest() { Name = "test", Type="TXT" };
     DnsResolutionResult result = resolver.Resolve(dnsRequest);
     result.DnsEntry.Should().BeNull();
 }
Exemplo n.º 3
0
 public void Should_Resolve_Dns_Query_Because_Entry_Matches_Exactly()
 {
     var dnsEntriesRepository = Mock.Of<IDnsEntriesRepository>(mock => mock.FindDnsEntry(It.IsAny<IUnitOfWork>(), It.IsAny<DnsRequest>()) == new DnsEntry());
     var unitOfWorkProvider = Mock.Of<IUnitOfWorkProvider>();
     IDnsResolver resolver = new DnsResolver(dnsEntriesRepository, unitOfWorkProvider);
     DnsRequest dnsRequest = new DnsRequest() { Name = "test", Type = "TXT" };
     DnsResolutionResult result = resolver.Resolve(dnsRequest);
     result.DnsEntry.Should().NotBeNull();
 }
Exemplo n.º 4
0
        private void ProcessQuestion(DnsMessage message, DnsQuestion dnsQuestion)
        {
            var dnsRequest = new DnsRequest() { Name = dnsQuestion.Name, Type = dnsQuestion.RecordType.ToString() };
            var result = dnsResolver.Resolve(dnsRequest);
            if (result.DnsEntry == null)
            {
                message.ReturnCode = ReturnCode.NxDomain;
                return;
            }

            message.AnswerRecords.Add(new ARecord(dnsRequest.Name, 3600, IPAddress.Parse(result.DnsEntry.IpV4)));
        }
Exemplo n.º 5
0
        public DnsResolutionResult Resolve(DnsRequest dnsRequest)
        {
            var result = new DnsResolutionResult();
            using (var uow = unitOfWorkProvider.GetUnitOfWork())
            {
                result.DnsEntry = (dnsEntriesRepository.FindDnsEntry(uow, dnsRequest)
                                   ?? dnsEntriesRepository.FindDnsEntryWithWildcard(uow, dnsRequest))
                                   ?? CheckCache(dnsRequest)
                                  ?? ForwardRequest(dnsRequest);
            }

            return result;
        }
Exemplo n.º 6
0
 private DnsEntry ForwardRequestToServer(DnsRequest dnsRequest, ForwardingServer forwardingServer, RecordType recordType)
 {
     var client = new DnsClient(IPAddress.Parse(forwardingServer.IpV4), 2000);
     var answer = client.Resolve(dnsRequest.Name, recordType);
     if (answer != null && answer.AnswerRecords.Any())
     {
         var record = answer.AnswerRecords.FirstOrDefault(r => r.RecordType == recordType);
         //if (record.RecordType != RecordType.A)
         //    return null;
         if (record == null)
             return null;
         if (record.RecordType != RecordType.A)
             return null;
         var dnsEntry = new DnsEntry() { Name = record.Name, IpV4 = ((ARecord)record).Address.ToString() };
         return dnsEntry;
     }
     return null;
 }
Exemplo n.º 7
0
 private DnsEntry ForwardRequest(DnsRequest dnsRequest)
 {
     using (var uow = unitOfWorkProvider.GetUnitOfWork())
     {
         var recordType = ParseRecordType(dnsRequest.Type);
         var forwardingServers = forwardingServersRepository.GetAllForwardingServers(uow);
         foreach (var forwardingServer in forwardingServers)
         {
             var dnsEntry = ForwardRequestToServer(dnsRequest, forwardingServer, recordType);
             if (dnsEntry != null)
             {
                 if (!Cache.ContainsKey(dnsEntry.Name))
                     Cache.Add(dnsEntry.Name, dnsEntry);
                 else
                     Cache[dnsEntry.Name] = dnsEntry;
                 return dnsEntry;
             }
         }
         return null;
     }
 }
Exemplo n.º 8
0
 private DnsEntry CheckCache(DnsRequest dnsRequest)
 {
     DnsEntry dnsEntry;
     return Cache.TryGetValue(dnsRequest.Name, out dnsEntry) ? dnsEntry : null;
 }