예제 #1
0
        public void FinDNS(DNSState state)
        {
            Log_Info("DNS Packet Sent From CLR_DEV9 DNS server");
            DNS retPay = state.DNS;

            string[] reqs = state.Questions;
            ConcurrentDictionary <string, byte[]> answers = state.GetAnswers();

            foreach (string req in reqs)
            {
                if (answers.ContainsKey(req))
                {
                    DNSResponseEntry ans = new DNSResponseEntry(req, 1, 1, answers[req], 10800);
                    retPay.Answers.Add(ans);
                }
                else
                {
                    //Log_Error("Missing an Answer");
                    retPay.RCode = 2; //ServerFailure
                }
            }
            byte[] udpPayload = retPay.GetBytes();
            if (udpPayload.Length > 512)
            {
                throw new NotImplementedException("DNS packet larger than 512bytes");
            }

            UDP retudp = new UDP(udpPayload);

            retudp.SourcePort      = 53;
            retudp.DestinationPort = state.ClientPort;

            _recvBuff.Enqueue(retudp);
            //Interlocked.Decrement(ref open);
        }
예제 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Sending");
            //Create DNS Packet
            DNS p = new DNS();

            p.ID     = 0;
            p.OPCode = (byte)DNSOPCode.Query;
            p.RD     = true;

            p.Questions.Add(new DNSQuestionEntry("www01.kddi-mmbb.jp", 1, 1));

            DNS p2 = new DNS(p.GetBytes());

            Console.WriteLine(); Console.WriteLine();
            UdpClient udp = new UdpClient();

            byte[] data = p.GetBytes();

            udp.Send(data, data.Length, new IPEndPoint(new IPAddress(new byte[] { 173, 198, 207, 99 }), 53));
            IPEndPoint retIP = new IPEndPoint(IPAddress.Any, 0);

            Console.WriteLine("Waiting for response");
            data = udp.Receive(ref retIP);
            Console.WriteLine("Recived From " + retIP.Address.ToString());
            p2 = new DNS(data);


            if (p2.AnswerCount == 1 &&
                (p2.Answers[0].Data[0] == 173 & p2.Answers[0].Data[1] == 198 & p2.Answers[0].Data[2] == 207 & p2.Answers[0].Data[3] == 99))
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Response Seems OK");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("BAD Response");
            }
            udp.Close();
            Console.ReadKey();
        }