internal ClientDnsResponse(IDnsRequest request, IDnsResponse response, byte[] message)
        {
            Request = request;

            this.message  = message;
            this.response = response;
        }
        internal ClientDnsResponse(IDnsRequest request, IDnsResponse response)
        {
            Request = request;

            this.message  = response.ToArray();
            this.response = response;
        }
Пример #3
0
        public async Task <IDnsResponse> Resolve(IDnsRequest request)
        {
            using (TcpClient tcp = new TcpClient())
            {
                await tcp.ConnectAsync(dns.Address, dns.Port);

                Stream stream = tcp.GetStream();
                byte[] buffer = request.ToArray();
                byte[] length = BitConverter.GetBytes((ushort)buffer.Length);

                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(length);
                }

                await stream.WriteAsync(length, 0, length.Length);

                await stream.WriteAsync(buffer, 0, buffer.Length);

                buffer = new byte[2];
                await Read(stream, buffer);

                if (BitConverter.IsLittleEndian)
                {
                    Array.Reverse(buffer);
                }

                buffer = new byte[BitConverter.ToUInt16(buffer, 0)];
                await Read(stream, buffer);

                IDnsResponse response = DefaultDnsResponse.FromArray(buffer);
                return(new ClientDnsResponse(request, response, buffer));
            }
        }
Пример #4
0
        public async Task <IDnsResponse> Resolve(IDnsRequest request)
        {
            using (UdpClient udp = new UdpClient())
            {
                await udp
                .SendAsync(request.ToArray(), request.Size, dns)
                .WithCancellationTimeout(timeout);

                UdpReceiveResult result = await udp.ReceiveAsync().WithCancellationTimeout(timeout);

                if (!result.RemoteEndPoint.Equals(dns))
                {
                    throw new IOException("Remote endpoint mismatch");
                }
                byte[]             buffer   = result.Buffer;
                DefaultDnsResponse response = DefaultDnsResponse.FromArray(buffer);

                if (response.Truncated)
                {
                    return(await fallback.Resolve(request));
                }

                return(new ClientDnsResponse(request, response, buffer));
            }
        }
Пример #5
0
            public async Task<IDnsResponse> Resolve(IDnsRequest request)
            {
                IDnsResponse response = null;

                foreach (IDnsRequestResolver resolver in resolvers)
                {
                    response = await resolver.Resolve(request);
                    if (response.AnswerRecords.Count > 0) break;
                }

                return response;
            }
        public DefaultDnsRequest(IDnsRequest request)
        {
            this.header     = new DnsMessageHeader();
            this.questions  = new List <DnsQuestion>(request.Questions);
            this.additional = new List <IResourceRecord>(request.AdditionalRecords);

            this.header.Response = false;

            Id               = request.Id;
            OperationCode    = request.OperationCode;
            RecursionDesired = request.RecursionDesired;
        }
        public static DefaultDnsResponse FromRequest(IDnsRequest request)
        {
            DefaultDnsResponse response = new DefaultDnsResponse();

            response.Id = request.Id;

            foreach (DnsQuestion question in request.Questions)
            {
                response.Questions.Add(question);
            }

            return(response);
        }
Пример #8
0
            public static DnsResponse FromRequest(IDnsRequest request)
            {
                var response = new DnsResponse {
                    Id = request.Id
                };

                foreach (DnsQuestion question in request.Questions)
                {
                    response.Questions.Add(question);
                }

                return(response);
            }
Пример #9
0
        public Task <IDnsResponse> Resolve(IDnsRequest request)
        {
            IDnsResponse response = DefaultDnsResponse.FromRequest(request);

            foreach (DnsQuestion question in request.Questions)
            {
                IList <IResourceRecord> answers = Get(question);

                if (answers.Count > 0)
                {
                    Merge(response.AnswerRecords, answers);
                }
                else
                {
                    response.ResponseCode = DnsResponseCode.NameError;
                }
            }

            return(Task.FromResult(response));
        }
Пример #10
0
 public DnsClientRequest(IPEndPoint dns, IDnsRequest?request = null, IDnsRequestResolver?resolver = null)
 {
     Dns       = dns;
     _request  = request == null ? new DnsRequest() : new DnsRequest(request);
     _resolver = resolver ?? new DnsUdpRequestResolver();
 }
Пример #11
0
 public ClientDnsRequest(IPEndPoint dns, IDnsRequest request = null) :
     this(new UdpDnsRequestResolver(dns), request)
 {
 }
Пример #12
0
 protected virtual void OnResponded(IDnsRequest request, IDnsResponse response)
 {
     RespondedEventHandler handlers = Responded;
     if (handlers != null) handlers(request, response);
 }
Пример #13
0
 public DnsClientRequest(IPAddress ip, int port = Definitions.DnsDefaultPort, IDnsRequest request = null, IDnsRequestResolver resolver = null)
     : this(new IPEndPoint(ip, port), request, resolver)
 {
 }
 public Task <IDnsResponse> Resolve(IDnsRequest request)
 {
     throw new DnsResponseException("Request failed");
 }
Пример #15
0
 protected virtual void OnRequested(IDnsRequest request)
 {
     RequestedEventHandler handlers = Requested;
     if (handlers != null) handlers(request);
 }
Пример #16
0
 public ClientDnsRequest(IDnsRequestResolver resolver, IDnsRequest request = null)
 {
     this.resolver = resolver;
     this.request  = request == null ? new DefaultDnsRequest() : new DefaultDnsRequest(request);
 }
Пример #17
0
 public DnsClientRequest(string ip, int port = Definitions.DnsDefaultPort, IDnsRequest request = null, IDnsRequestResolver resolver = null)
     : this(IPAddress.Parse(ip), port, request, resolver)
 {
 }
Пример #18
0
 public ClientDnsRequest(string ip, int port = DEFAULT_PORT, IDnsRequest request = null) :
     this(IPAddress.Parse(ip), port, request)
 {
 }
Пример #19
0
 public ClientDnsRequest(IPAddress ip, int port = DEFAULT_PORT, IDnsRequest request = null) :
     this(new IPEndPoint(ip, port), request)
 {
 }
        public static ClientDnsResponse FromArray(IDnsRequest request, byte[] message)
        {
            DefaultDnsResponse response = DefaultDnsResponse.FromArray(message);

            return(new ClientDnsResponse(request, response, message));
        }
Пример #21
0
 public ClientDnsRequest Create(IDnsRequest request = null)
 {
     return(new ClientDnsRequest(resolver, request));
 }
Пример #22
0
 public DnsClientRequest Create(IDnsRequest request = null)
 {
     return(new DnsClientRequest(_dns, request, _resolver));
 }