venerdì 19 settembre 2025

C# rilevare i programmi che stanno comunicando in rete

 

C# programmi che usano la rete

In questo esempio di codice nel linguaggio di programmazione C#, vediamo come rilevare tutti i programmi in esecuzione sul computer con Windows, che hanno aperta una comunicazione esterna.

In particolare, rileviamo il nome del programma, il PID, ip remoto e lo stato, ottenuti questi valori verranno visualizzati nella griglia.


Di seguito il frammento di codice delle suddette operazioni.


C#

private void BtnNetStat_Click(object sender, EventArgs e)

{

    Process p = new Process();

    p.StartInfo.FileName = "netstat";

    p.StartInfo.Arguments = "-ano";

    p.StartInfo.RedirectStandardOutput = true;

    p.StartInfo.UseShellExecute = false;

    p.StartInfo.CreateNoWindow = true;

    p.Start();

 

    string output = p.StandardOutput.ReadToEnd();

    p.WaitForExit();

    DataColumn dtcNomeProcesso = new DataColumn("Nome Processo", typeof(string));

    DataColumn dtcPid = new DataColumn("PID", typeof(string));

    DataColumn dtcIpRemoto = new DataColumn("Ip remoto", typeof(string));

    DataColumn dtcStato = new DataColumn("Stato", typeof(string));

    DataTable dttDati = new DataTable();

    dttDati.Columns.Add(dtcNomeProcesso);

    dttDati.Columns.Add(dtcPid);

    dttDati.Columns.Add(dtcIpRemoto);

    dttDati.Columns.Add(dtcStato);

 

 

    var righe = output.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);

    foreach (var line in righe)

    {

        if (line.StartsWith("  TCP") || line.StartsWith("  UDP"))

        {

            var parts = Regex.Split(line.Trim(), @"\s+");

            if (parts.Length >= 5)

            {

                string ipRemoto = parts[2];

                string stato = parts[3];

                string pid = parts[4];

 

                if (ipRemoto != "0.0.0.0:0" && ipRemoto != "*:*")

                {

                    try

                    {

                        DataRow riga = dttDati.NewRow();

                               

                              

                        var process = Process.GetProcessById(int.Parse(pid));

                               

                        riga["Nome Processo"] = process.ProcessName;

                        riga["PID"] = pid;

                        riga["Ip remoto"] = ipRemoto;

                        riga["Stato"] = stato;

                        dttDati.Rows.Add(riga);

 

                    }

                    catch (Exception ex)

                    {

                         MessageBox.Show($"Si è verificato un errore: {ex.Message}");

                    }

                }

                dataGridView1.DataSource = dttDati;

            }

        }

 

    }

 


Nessun commento:

Posta un commento