Help assistance

using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IPScannerByNR
{
    public partial class Form1 : Form
    {
        private string _ipAddress = "1.51.98";
        private bool isRunning = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (isRunning)
            {
                MessageBox.Show("Operation already in progress.");
                return;
            }

            isRunning = true;
            button1.Enabled = false;
            dataGridView1.Rows.Clear();

            Task.Run(() => RunPingScript()).ContinueWith(t =>
            {
                this.Invoke((Action)(() =>
                {
                    button1.Enabled = true;
                    isRunning = false;
                }));
            });
        }

        private void setIpButton_Click(object sender, EventArgs e)
        {
            string ipAddressInput = ipAddressTextBox.Text;

            System.Net.IPAddress ipAddress;

            if (string.IsNullOrEmpty(ipAddressInput) || !System.Net.IPAddress.TryParse(ipAddressInput, out ipAddress))
            {
                MessageBox.Show("Please Enter a Valid IP address.", "Invalid IP", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            _ipAddress = ipAddressInput;

            dataGridView1.Rows.Clear();
        }

        private void RunPingScript()
        {
            string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pingScript.bat");

            string scriptContent = "@Echo off\n" +
            "setlocal enabledelayedexpansion\n" +
            "for /L %%i in (2,1,254) do (\n" +
            " set \"status=Unknown\"\n" +
            " ping -f -n 1 " + _ipAddress + ".%%i > tempPingResult.txt\n" +
            " for /f \"tokens=* delims=\" %%a in (tempPingResult.txt) do (\n" +
            " echo %%a | find /i \"Request timed out.\" > nul && set \"status=Request Timed out\"\n" +
            " echo %%a | find /i \"Destination host unreachable.\" > nul && set \"status=Destination host unreachable\"\n" +
            " echo %%a | find /i \"TTL=\" > nul && if !status! == \"Unknown\" set \"status=In Use\"\n" +
            " )\n" +
            " if \"" + _ipAddress + ".%%i\" == \"" + _ipAddress + ".1\" (\n" +
            " set \"status=In Use\"\n" +
            " )\n" +
            " echo " + _ipAddress + ".%%i !status!\n" +
            ")\n" +
            "del tempPingResult.txt";

            File.WriteAllText(batchFilePath, scriptContent);

            ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
            {
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };

            using (Process process = new Process())
            {
                process.StartInfo = processInfo;

                process.OutputDataReceived += (sender, args) =>
                {
                    if (args.Data != null)
                    {
                        this.BeginInvoke((Action)(() =>
                        {
                            if (!this.IsDisposed && this.IsHandleCreated)
                            {
                                UpdateDataGridView(args.Data);
                            }
                        }));
                    }
                };

                process.ErrorDataReceived += (sender, args) =>
                {
                    if (args.Data != null)
                    {
                        Console.Error.WriteLine("Error: " + args.Data);
                    }
                };

                try
                {
                    process.Start();
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();
                    process.WaitForExit();
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine("Exception occurred: " + ex.Message);
                }
            }
        }

        private void UpdateDataGridView(string output)
        {

            string[] parts = output.Split(new[] { ' ' }, 2);

            if (parts.Length > 1)
            {

                string ip = parts[0];

                string status = parts[1].Trim();



                if (ip == _ipAddress + ".1" && status == "Unknown")
                {

                    status = "In Use";

                }

                int rowIndex = dataGridView1.Rows.Add(ip, status);



                switch (status)
                {

                    case "Request Timed out":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Red;

                        break;

                    case "Destination host unreachable":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Green; // Use a different color if needed

                        break;

                    case "In Use":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Orange;

                        break;

                    default:

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Gray;

                        break;

                }

                Console.WriteLine("Added IP: " + ip + " Status: " + status);

            }

            else
            {

                Console.WriteLine("Output: " + output);

            }

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
            {
                DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
                string ipAddress = row.Cells["ipAddressColumn"].Value.ToString();
                string status = row.Cells["statusColumn"].Value.ToString();
                MessageBox.Show("IP Address: " + ipAddress + "\nStatus: " + status + " Cell Clicked");
            }
        }
    }
}

private void RunPingScript()
{
string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “pingScript.bat”);

string scriptContent = "@Echo off\n" +
"setlocal enabledelayedexpansion\n" +
"for /L %%i in (2,1,254) do (\n" +
" set \"status=Unknown\"\n" +
" ping -n 1 -w 1000 " + _ipAddress + ".%%i | find \"TTL=\" > nul && set \"status=In Use\"\n" +
" ping -n 1 -w 1000 " + _ipAddress + ".%%i | find \"Request timed out\" > nul && set \"status=Request Timed out\"\n" +
" ping -n 1 -w 1000 " + _ipAddress + ".%%i | find \"Destination host unreachable\" > nul && set \"status=Destination host unreachable\"\n" +
" echo " + _ipAddress + ".%%i !status!\n" +
")\n";

File.WriteAllText(batchFilePath, scriptContent);

ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
{
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false,
    CreateNoWindow = true
};

using (Process process = new Process())
{
    process.StartInfo = processInfo;

    process.OutputDataReceived += (sender, args) =>
    {
        if (args.Data != null)
        {
            this.BeginInvoke((Action)(() =>
            {
                if (!this.IsDisposed && this.IsHandleCreated)
                {
                    UpdateDataGridView(args.Data);
                }
            }));
        }
    };

    process.ErrorDataReceived += (sender, args) =>
    {
        if (args.Data != null)
        {
            Console.Error.WriteLine("Error: " + args.Data);
        }
    };

    try
    {
        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();
        process.WaitForExit();
    }
    catch (Exception ex)
    {
        Console.Error.WriteLine("Exception occurred: " + ex.Message);
    }
}

}

private void UpdateDataGridView(string output)
{
string parts = output.Split(new { ’ ’ }, 2);

if (parts.Length > 1)
{
    string ip = parts[0];
    string status = parts[1].Trim();

    int rowIndex = dataGridView1.Rows.Add(ip, status);

    switch (status)
    {
        case "Request Timed out":
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Red;
            break;

        case "Destination host unreachable":
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Green;
            break;

        case "In Use":
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Orange;
            break;

        default:
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Gray;
            break;
    }

    Console.WriteLine("Added IP: " + ip + " Status: " + status);
}
else
{
    Console.WriteLine("Output: " + output);
}

}

private void UpdateDataGridView(string output)
{
string parts = output.Split(new { ’ ’ }, 2);

if (parts.Length > 1)
{
    string ip = parts[0];
    string status = parts[1].Trim();

    int rowIndex = dataGridView1.Rows.Add(ip, status);

    switch (status)
    {
        case "Request Timed out":
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Red;
            break;

        case "Destination host unreachable":
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Green;
            break;

        case "In Use":
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Orange;
            break;

        default:
            dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Gray;
            break;
    }

    Console.WriteLine("Added IP: " + ip + " Status: " + status);
}
else
{
    Console.WriteLine("Output: " + output);
}

}

using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IPScannerByNR
{
    public partial class Form1 : Form
    {
        private string _ipAddress = "1.51.98";
        private bool isRunning = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (isRunning)
            {
                MessageBox.Show("Operation already in progress.");
                return;
            }

            isRunning = true;
            button1.Enabled = false;
            dataGridView1.Rows.Clear();

            Task.Run(() => RunPingScript()).ContinueWith(t =>
            {
                this.Invoke((Action)(() =>
                {
                    button1.Enabled = true;
                    isRunning = false;
                }));
            });
        }

        private void setIpButton_Click(object sender, EventArgs e)
        {
            string ipAddressInput = ipAddressTextBox.Text;

            System.Net.IPAddress ipAddress;

            if (string.IsNullOrEmpty(ipAddressInput) || !System.Net.IPAddress.TryParse(ipAddressInput, out ipAddress))
            {
                MessageBox.Show("Please Enter a Valid IP address.", "Invalid IP", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            _ipAddress = ipAddressInput;

            dataGridView1.Rows.Clear();
        }

        private void RunPingScript()
        {
            string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pingScript.bat");

            string scriptContent = "@Echo off\n" +
            "setlocal enabledelayedexpansion\n" +
            "for /L %%i in (2,1,254) do (\n" +
            " set \"status=Unknown\"\n" +
            " ping -4 -f " + _ipAddress + ".%%i > tempPingResult.txt\n" +
            " for /f \"tokens=* delims=\" %%a in (tempPingResult.txt) do (\n" +
            " echo %%a | find /i \"Request timed out.\" > nul && set \"status=Request Timed out\"\n" +
            " echo %%a | find /i \"Destination host unreachable.\" > nul && set \"status=Destination host unreachable\"\n" +
            " echo %%a | find /i \"TTL=\" > nul && if !status! == \"Unknown\" set \"status=In Use\"\n" +
            " )\n" +
            " if \"" + _ipAddress + ".%%i\" == \"" + _ipAddress + ".1\" (\n" +
            " set \"status=In Use\"\n" +
            " )\n" +
            " echo " + _ipAddress + ".%%i !status!\n" +
            ")\n" +
            "del tempPingResult.txt";

            File.WriteAllText(batchFilePath, scriptContent);

            ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
            {
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };

            using (Process process = new Process())
            {
                process.StartInfo = processInfo;

                process.OutputDataReceived += (sender, args) =>
                {
                    if (args.Data != null)
                    {
                        this.BeginInvoke((Action)(() =>
                        {
                            if (!this.IsDisposed && this.IsHandleCreated)
                            {
                                UpdateDataGridView(args.Data);
                            }
                        }));
                    }
                };

                process.ErrorDataReceived += (sender, args) =>
                {
                    if (args.Data != null)
                    {
                        Console.Error.WriteLine("Error: " + args.Data);
                    }
                };

                try
                {
                    process.Start();
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();
                    process.WaitForExit();
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine("Exception occurred: " + ex.Message);
                }
            }
        }

        private void UpdateDataGridView(string output)
        {

            string[] parts = output.Split(new[] { ' ' }, 2);

            if (parts.Length > 1)
            {

                string ip = parts[0];

                string status = parts[1].Trim();



                if (ip == _ipAddress + ".1" && status == "Unknown")
                {

                    status = "In Use";

                }

                int rowIndex = dataGridView1.Rows.Add(ip, status);



                switch (status)
                {

                    case "Request Timed out":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Red;

                        break;

                    case "Destination host unreachable":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Green; // Use a different color if needed

                        break;

                    case "In Use":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Orange;

                        break;

                    default:

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Gray;

                        break;

                }

                Console.WriteLine("Added IP: " + ip + " Status: " + status);

            }

            else
            {

                Console.WriteLine("Output: " + output);

            }

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
            {
                DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
                string ipAddress = row.Cells["ipAddressColumn"].Value.ToString();
                string status = row.Cells["statusColumn"].Value.ToString();
                MessageBox.Show("IP Address: " + ipAddress + "\nStatus: " + status + " Cell Clicked");
            }
        }
    }
}

Design

namespace IPScannerByNR
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;
        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.DataGridViewTextBoxColumn ipAddressColumn;
        private System.Windows.Forms.DataGridViewTextBoxColumn statusColumn;
        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox ipAddressTextBox;
        private System.Windows.Forms.Button setIpButton;

        private void InitializeComponent()
        {
            this.dataGridView1 = new System.Windows.Forms.DataGridView();
            this.ipAddressColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.statusColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.button1 = new System.Windows.Forms.Button();
            this.ipAddressTextBox = new System.Windows.Forms.TextBox();
            this.setIpButton = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
            this.SuspendLayout();
            // 
            // dataGridView1
            // 
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.ipAddressColumn,
            this.statusColumn});
            this.dataGridView1.Location = new System.Drawing.Point(16, 15);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.RowHeadersWidth = 51;
            this.dataGridView1.Size = new System.Drawing.Size(1035, 487);
            this.dataGridView1.TabIndex = 0;
            this.dataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);
            // 
            // IPAddressColumn
            // 
            this.ipAddressColumn.HeaderText = "IP Address";
            this.ipAddressColumn.MinimumWidth = 6;
            this.ipAddressColumn.Name = "ipAddressColumn";
            this.ipAddressColumn.ReadOnly = true;
            this.ipAddressColumn.Width = 125;
            // 
            // statusColumn
            // 
            this.statusColumn.HeaderText = "Status";
            this.statusColumn.MinimumWidth = 6;
            this.statusColumn.Name = "statusColumn";
            this.statusColumn.ReadOnly = true;
            this.statusColumn.Width = 125;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(951, 510);
            this.button1.Margin = new System.Windows.Forms.Padding(4);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(100, 28);
            this.button1.TabIndex = 1;
            this.button1.Text = "Start Ping";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);

            //
            // ipAddressTextBox
            //
            this.ipAddressTextBox.Location = new System.Drawing.Point(16, 510);
            this.ipAddressTextBox.Margin = new System.Windows.Forms.Padding(4);
            this.ipAddressTextBox.Name = "ipAddressTextBox";
            this.ipAddressTextBox.Size = new System.Drawing.Size(200, 22);
            this.ipAddressTextBox.TabIndex = 2;

            //
            // setIpButton
            //
            this.setIpButton.Location = new System.Drawing.Point(224, 510);
            this.setIpButton.Margin = new System.Windows.Forms.Padding(4);
            this.setIpButton.Name = "setIpButton";
            this.setIpButton.Size = new System.Drawing.Size(100, 28);
            this.setIpButton.TabIndex = 3;
            this.setIpButton.Text = "Set IP";
            this.setIpButton.Click += new System.EventHandler(this.setIpButton_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(1067, 554);
            this.Controls.Add(this.setIpButton);
            this.Controls.Add(this.ipAddressTextBox);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.dataGridView1);
            this.Margin = new System.Windows.Forms.Padding(4);
            this.Name = "Form1";
            this.Text = "IP Scanner";
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}


#####################################

 private void RunPingScript()
        {
            string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pingScript.bat");

            string scriptContent = "@Echo off\n" +
            "setlocal enabledelayedexpansion\n" +
            "for /L %%i in (2,1,254) do (\n" +
            " set \"status=Unknown\"\n" +
            " ping -4 -f " + _ipAddress + ".%%i > tempPingResult.txt\n" +
            " for /f \"tokens=* delims=\" %%a in (tempPingResult.txt) do (\n" +
            " echo %%a | find /i \"Request timed out.\" > nul && set \"status=Request Timed out\"\n" +
            " echo %%a | find /i \"Destination host unreachable.\" > nul && set \"status=Destination host unreachable\"\n" +
            " echo %%a | find /i \"TTL=\" > nul && if !status! == \"Unknown\" set \"status=In Use\"\n" +
            " )\n" +
            " if \"" + _ipAddress + ".%%i\" == \"" + _ipAddress + ".1\" (\n" +
            " set \"status=In Use\"\n" +
            " )\n" +
            " echo " + _ipAddress + ".%%i !status!\n" +
            ")\n" +
            "del tempPingResult.txt";

            File.WriteAllText(batchFilePath, scriptContent);

            ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
            {
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };

            using (Process process = new Process())
            {
                process.StartInfo = processInfo;

                process.OutputDataReceived += (sender, args) =>
                {
                    if (args.Data != null)
                    {
                        this.BeginInvoke((Action)(() =>
                        {
                            if (!this.IsDisposed && this.IsHandleCreated)
                            {
                                UpdateDataGridView(args.Data);
                            }
                        }));
                    }
                };

                process.ErrorDataReceived += (sender, args) =>
                {
                    if (args.Data != null)
                    {
                        Console.Error.WriteLine("Error: " + args.Data);
                    }
                };

                try
                {
                    process.Start();
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();
                    process.WaitForExit();
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine("Exception occurred: " + ex.Message);
                }
            }
        }
private void RunPingScript()
{
    string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pingScript.bat");

    string scriptContent = "@Echo off\n" +
    "setlocal enabledelayedexpansion\n" +
    "for /L %%i in (2,1,254) do (\n" +
    "    set \"status=Unknown\"\n" +
    "    ping -4 -f " + _ipAddress + ".%%i > tempPingResult.txt\n" +
    "    for /f \"tokens=* delims=\" %%a in (tempPingResult.txt) do (\n" +
    "        echo %%a | find /i \"Request timed out.\" > nul && set \"status=Request Timed out\"\n" +
    "        echo %%a | find /i \"Destination host unreachable.\" > nul && set \"status=Destination host unreachable\"\n" +
    "        echo %%a | find /i \"TTL=\" > nul && if \"!status!\" == \"Unknown\" set \"status=In Use\"\n" +
    "    )\n" +
    "    if \"" + _ipAddress + ".%%i\" == \"" + _ipAddress + ".1\" (\n" +
    "        set \"status=In Use\"\n" +
    "    )\n" +
    "    echo " + _ipAddress + ".%%i !status!\n" +
    ")\n" +
    "del tempPingResult.txt";

    File.WriteAllText(batchFilePath, scriptContent);

    ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
    {
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };

    using (Process process = new Process())
    {
        process.StartInfo = processInfo;

        process.OutputDataReceived += (sender, args) =>
        {
            if (args.Data != null)
            {
                this.BeginInvoke((Action)(() =>
                {
                    if (!this.IsDisposed && this.IsHandleCreated)
                    {
                        UpdateDataGridView(args.Data);
                    }
                }));
            }
        };

        process.ErrorDataReceived += (sender, args) =>
        {
            if (args.Data != null)
            {
                Console.Error.WriteLine("Error: " + args.Data);
            }
        };

        try
        {
            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            process.WaitForExit();
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Exception occurred: " + ex.Message);
        }
    }
}

using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IPScannerByNR
{
    public partial class Form1 : Form
    {
        private string _ipAddress = "1.51.98";
        private bool isRunning = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (isRunning)
            {
                MessageBox.Show("Operation already in progress.");
                return;
            }

            isRunning = true;
            button1.Enabled = false;
            dataGridView1.Rows.Clear();

            Task.Run(() => RunPingScript()).ContinueWith(t =>
            {
                this.Invoke((Action)(() =>
                {
                    button1.Enabled = true;
                    isRunning = false;
                }));
            });
        }

        private void setIpButton_Click(object sender, EventArgs e)
        {
            string ipAddressInput = ipAddressTextBox.Text;

            System.Net.IPAddress ipAddress;

            if (string.IsNullOrEmpty(ipAddressInput) || !System.Net.IPAddress.TryParse(ipAddressInput, out ipAddress))
            {
                MessageBox.Show("Please Enter a Valid IP address.", "Invalid IP", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            _ipAddress = ipAddressInput;

            dataGridView1.Rows.Clear();
        }

private void RunPingScript()
{
    string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pingScript.bat");

    string scriptContent = "@Echo off\n" +
    "setlocal enabledelayedexpansion\n" +
    "for /L %%i in (2,1,254) do (\n" +
    "    set \"status=Unknown\"\n" +
    "    ping -4 -n 1 -f " + _ipAddress + ".%%i > tempPingResult.txt\n" +
    "    for /f \"tokens=* delims=\" %%a in (tempPingResult.txt) do (\n" +
    "        echo %%a | find /i \"Request timed out.\" > nul && set \"status=Request Timed out\"\n" +
    "        echo %%a | find /i \"Destination host unreachable.\" > nul && set \"status=Destination host unreachable\"\n" +
    "        echo %%a | find /i \"TTL=\" > nul && if \"!status!\" == \"Unknown\" set \"status=In Use\"\n" +
    "    )\n" +
    "    if \"" + _ipAddress + ".%%i\" == \"" + _ipAddress + ".1\" (\n" +
    "        set \"status=In Use\"\n" +
    "    )\n" +
    "    echo " + _ipAddress + ".%%i !status!\n" +
    ")\n" +
    "del tempPingResult.txt";

    File.WriteAllText(batchFilePath, scriptContent);

    ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
    {
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };

    using (Process process = new Process())
    {
        process.StartInfo = processInfo;

        process.OutputDataReceived += (sender, args) =>
        {
            if (args.Data != null)
            {
                this.BeginInvoke((Action)(() =>
                {
                    if (!this.IsDisposed && this.IsHandleCreated)
                    {
                        UpdateDataGridView(args.Data);
                    }
                }));
            }
        };

        process.ErrorDataReceived += (sender, args) =>
        {
            if (args.Data != null)
            {
                Console.Error.WriteLine("Error: " + args.Data);
            }
        };

        try
        {
            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            process.WaitForExit();
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Exception occurred: " + ex.Message);
        }
    }
}
        private void UpdateDataGridView(string output)
        {

            string[] parts = output.Split(new[] { ' ' }, 2);

            if (parts.Length > 1)
            {

                string ip = parts[0];

                string status = parts[1].Trim();



                if (ip == _ipAddress + ".1" && status == "Unknown")
                {

                    status = "In Use";

                }

                int rowIndex = dataGridView1.Rows.Add(ip, status);



                switch (status)
                {

                    case "Request Timed out":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Red;

                        break;

                    case "Destination host unreachable":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Green; // Use a different color if needed

                        break;

                    case "In Use":

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Orange;

                        break;

                    default:

                        dataGridView1.Rows[rowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.Gray;

                        break;

                }

                Console.WriteLine("Added IP: " + ip + " Status: " + status);

            }

            else
            {

                Console.WriteLine("Output: " + output);

            }

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
            {
                DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
                string ipAddress = row.Cells["ipAddressColumn"].Value.ToString();
                string status = row.Cells["statusColumn"].Value.ToString();
                MessageBox.Show("IP Address: " + ipAddress + "\nStatus: " + status + " Cell Clicked");
            }
        }
    }
}
private void RunPingScript()
{
    string batchFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pingScript.bat");

    string scriptContent = "@Echo off\n" +
    "setlocal enabledelayedexpansion\n" +
    "for /L %%i in (2,1,254) do (\n" +
    "    set \"status=Unknown\"\n" +
    "    ping -4 -n 1 -w 1000 " + _ipAddress + ".%%i > tempPingResult.txt\n" +
    "    for /f \"tokens=* delims=\" %%a in (tempPingResult.txt) do (\n" +
    "        echo %%a | find /i \"Request timed out.\" > nul && set \"status=Request Timed out\"\n" +
    "        echo %%a | find /i \"Destination host unreachable.\" > nul && set \"status=Destination host unreachable\"\n" +
    "        echo %%a | find /i \"TTL=\" > nul && set \"status=In Use\"\n" +
    "    )\n" +
    "    echo " + _ipAddress + ".%%i !status!\n" +
    ")\n" +
    "del tempPingResult.txt";

    File.WriteAllText(batchFilePath, scriptContent);

    ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", "/c " + batchFilePath)
    {
        RedirectStandardOutput = true,
        RedirectStandardError = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };

    using (Process process = new Process())
    {
        process.StartInfo = processInfo;

        process.OutputDataReceived += (sender, args) =>
        {
            if (args.Data != null)
            {
                this.BeginInvoke((Action)(() =>
                {
                    if (!this.IsDisposed && this.IsHandleCreated)
                    {
                        UpdateDataGridView(args.Data);
                    }
                }));
            }
        };

        process.ErrorDataReceived += (sender, args) =>
        {
            if (args.Data != null)
            {
                Console.Error.WriteLine("Error: " + args.Data);
            }
        };

        try
        {
            process.Start();
            process.BeginOutputReadLine();
            process.BeginErrorReadLine();
            process.WaitForExit();
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine("Exception occurred: " + ex.Message);
        }
    }
}