giovedì 25 settembre 2025

C# rilevare i programmi che comunicano esternamente - internet .Net 9

L’esempio di codice nel linguaggio C# riportato qui di seguito, illustra una tecnica per rilevare i programmi in esecuzione che stanno comunicando esternamente, in particolare i software che usano internet per inviare i dati.
Tramite un progetto di tipo “Windows Forms”, visualizziamo i programmi che sono in esecuzione e che stanno comunicando e li visualizziamo in un controllo DataGridView, il tutto come mostrato in figura 1.



C# rilevare i programmi che comunicano esternamente


Figura 1 – i programmi in esecuzione

In un evento click di un pulsante, inseriamo il codice che tramite la classe Process, eseguiamo un comando da prompt dei comandi, e rileviamo le informazioni di nostro interesse.
Queste informazioni verranno visualizzate nel controllo DataGridView tramite un DataTable.

Di seguito il frammento di codice delle suddette operazioni


C#

private void BtnConnessioniAttive_Click(object sender, EventArgs e)

 {

     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);

 

 

     Process netstat = new Process();

     netstat.StartInfo.FileName = "netstat";

     netstat.StartInfo.Arguments = "-n -o"; // -n: IP numerici, -o: mostra PID

     netstat.StartInfo.UseShellExecute = false;

     netstat.StartInfo.RedirectStandardOutput = true;

     netstat.StartInfo.CreateNoWindow = true;

     netstat.Start();

 

     string output = netstat.StandardOutput.ReadToEnd();

     netstat.WaitForExit();

 

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

 

     foreach (var linea in righe)

     {

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

         {

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

             if (parts.Length >= 5)

             {

                 string ipRemoto = parts[2];

                 string stato = parts[3];

                 string pid = parts[4];

 

 

                 //Non tiene conto delle connessioni locali

                 if (!ipRemoto.StartsWith("127.") && !ipRemoto.StartsWith("::1") && ipRemoto != "0.0.0.0:0")

                 {

                     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("Errore: " + ex.Message);

                     }

                     dataGridView1.DataSource = dttDati;

                 }

             }

         }

     }


Nessun commento: