public void Query(string serverHost, int serverPort, string name, string qtype)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            var        ipv4Address = GetIpv4Address(serverHost);
            IPEndPoint endPoint    = new IPEndPoint(ipv4Address, serverPort);

            socket.Connect(endPoint);

            var input = DnsUtils.CreateQuestionAsBytes(name, qtype);

            Console.WriteLine($"Sending: { input.Length }bytes data");
            socket.Send(input);

            Console.WriteLine("Receiving...");
            var output = new byte[512];
            var c      = socket.Receive(output);

            Console.WriteLine($"Received {c}bytes");

            var dnsPacket = new byte[c];

            Array.Copy(output, dnsPacket, c);
            DnsUtils.ReadAndPrintDnsMessage(dnsPacket);

            socket.Close();
        }
Esempio n. 2
0
        private static IRecord ReadRecord(ByteReader byteReader)
        {
            var name   = DnsUtils.ReadName(byteReader);
            var rtype  = byteReader.GetUshort();
            var rclass = byteReader.GetUshort();
            var ttl    = byteReader.GetUint();

            if ((RecordType)rtype == RecordType.NS)
            {
                var record = new NSRecord()
                {
                    Name   = name,
                    RClass = rclass,
                    Ttl    = ttl,
                };
                var rdlength = byteReader.GetUshort();
                record.Host = ReadName(byteReader);
                return(record);
            }
            else if ((RecordType)rtype == RecordType.A)
            {
                var rdlength = byteReader.GetUshort();
                var ipv4     = ReadIpv4(byteReader);
                var record   = new ARecord(name, ipv4)
                {
                    RClass = rclass,
                    Ttl    = ttl,
                };
                return(record);
            }
            else if ((RecordType)rtype == RecordType.AAAA)
            {
                var rdlength = byteReader.GetUshort();
                var ipv6     = ReadIpv6(byteReader);
                var record   = new AaaaRecord(name, ipv6)
                {
                    RClass = rclass,
                    Ttl    = ttl,
                };
                return(record);
            }
            else
            {
                var record = new Record()
                {
                    Name   = name,
                    RType  = rtype,
                    RClass = (ushort)rclass,
                    Ttl    = ttl,
                };
                var rdlength = byteReader.GetUshort();
                record.RData = byteReader.GetBytes(rdlength);
                return(record);
            }
        }