Beispiel #1
0
        private void BT_DNS_Click(object sender, EventArgs e)
        {
            BT_DNS.Enabled = false;
            if (!IsValidIPAddress(TB_DNS_IP.Text))
            {
                MessageBox.Show("The IP adress you entered seems to be invalid. Please check it.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!BGW_DNS.IsBusy)
            {
                TB_DNS_IP.Enabled = false;
                BT_DNS.Text       = "STOP DNS";
                LB_DNS_Log.Items.Add(DateTime.Now.ToLongTimeString() + ": Sending command: Start DNS");
                LB_DNS_Log.SelectedIndex = LB_DNS_Log.Items.Count - 1;
                BGW_DNS.RunWorkerAsync(TB_DNS_IP.Text);
                LA_DNS_Status.Text      = "DNS running";
                LA_DNS_Status.BackColor = Color.Green;
                BT_DNS.Enabled          = true;
            }
            else
            {
                BGW_DNS.ReportProgress(1, "Sending command: Stop DNS");
                BGW_DNS.CancelAsync();

                //if (dnsserv != null)
                //    dnsserv.Shutdown(SocketShutdown.Both);
                //while (BGW_DNS.IsBusy)
                //{
                //    Thread.Sleep(1000);
                //}

                //BT_DNS.Enabled = true;
            }
        }
Beispiel #2
0
        private void BGW_DNS_DoWork(object sender, DoWorkEventArgs e)
        {
            string fake_ip = e.Argument.ToString();

            if (!IsValidIPAddress(fake_ip))
            {
                return;
            }
            BGW_DNS.ReportProgress(1, "DNS started...");
            Socket s;
            Socket dnsserv = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            dnsserv.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
            dnsserv.Bind(new IPEndPoint(IPAddress.Any, 53));

            byte[] fake_ip_byte = new byte[4];
            for (int i = 0; i <= 3; i++)
            {
                fake_ip_byte[i] = byte.Parse(fake_ip.Split('.')[i]);
            }

            byte[]   r;
            byte[]   rr     = new byte[512];
            int      lngSnd = 0;
            int      lngRcv = 0;
            string   str_r  = null;
            string   str_rr = null;
            string   host   = null;
            EndPoint rem_ep = new IPEndPoint(IPAddress.Any, 0);

            while (!BGW_DNS.CancellationPending)
            {
                try
                {
                    r = new byte[511];
                    dnsserv.ReceiveTimeout = 5000;
                    lngRcv = dnsserv.ReceiveFrom(r, SocketFlags.None, ref rem_ep);
                    //BGW_DNS.ReportProgress(1, "Connected to: " + rem_ep.ToString());
                    //r = new byte[lngRcv];
                    Array.Resize(ref r, lngRcv + 1);

                    str_r = Encoding.ASCII.GetString(r, 0, lngRcv);

                    host = str_r.Substring(12, str_r.IndexOf('\0', 12) - 12);

                    string requestedHost = "";
                    int    n             = 0;

                    while (n < host.Length)
                    {
                        requestedHost += host.Substring(n + 1, r[n + 12]) + ".";
                        n             += r[n + 12] + 1;
                    }
                    requestedHost = requestedHost.Substring(0, requestedHost.Length - 1);

                    rr = new byte[511];
                    s  = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    s.Connect("208.67.222.222", 53);
                    s.Send(r, lngRcv, SocketFlags.None);
                    lngSnd = s.Receive(rr, SocketFlags.None);
                    //rr = new byte[lngSnd];

                    Array.Resize(ref rr, lngSnd + 1);
                    if (requestedHost == "gamestats2.gs.nintendowifi.net")
                    {
                        Array.Copy(fake_ip_byte, 0, rr, 0x3c, 4);
                        BGW_DNS.ReportProgress(1, "Request (fake): " + requestedHost);
                    }
                    else
                    {
                        BGW_DNS.ReportProgress(1, "Request: " + requestedHost);
                    }


                    str_rr = Encoding.ASCII.GetString(rr, 0, lngSnd);

                    dnsserv.SendTo(rr, rr.Length, SocketFlags.None, rem_ep);
                }
                catch (SocketException ex)
                {//ErrorCode 10060
                    if (ex.ErrorCode != 10060)
                    {
                        BGW_DNS.ReportProgress(1, "Error (" + ex.Message + ")");
                    }
                }
                catch (Exception ex)
                {
                    BGW_DNS.ReportProgress(1, "Error (" + ex.Message + ")");
                }
            }
        }