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); }
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(); }