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
{
}
}
dataGridView1.DataSource =
dttDati;
}
}
}

Nessun commento:
Posta un commento