fabiocaruso ha scritto:
Ho appena fatto la stessa cosa: ho copiato il codice da te modificato, dentro l'evento click di un pulsante (sia con Windows Form che con WPF), e funziona. Solo che il controllo "if" che tu hai messo dopo il foreach, non va bene, perchè lui prende ogni linea del file della MAC-List, e con il ciclo foreach la confronta con la List sMacAddress (che è in memoria e che contiene i MAC del tuo PC). Dovresti fare così:
private void Button_Click(object sender, EventArgs e)
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
List<string> sMacAddress = new List<string>(); //in questa lista ci andranno tutti i MAC Address del PC
foreach (NetworkInterface adapter in nics)
{
string sMac = adapter.GetPhysicalAddress().ToString();
if (sMac.Length == 0)
break;
sMacAddress.Add(sMac.Substring(0, 2) + ":" + sMac.Substring(2, 2) + ":" + sMac.Substring(4, 2) + ":" + sMac.Substring(6, 2) + ":" + sMac.Substring(8, 2) + ":" + sMac.Substring(10, 2));
}
using (StreamReader macList = new StreamReader("MAF.txt"))
{
string linea;
bool inizio = false;
bool infetto = false;
while ((linea = macList.ReadLine()) != null)
{
if (linea.Contains("MAC - list")) //cerca nel file l'inizio della lista dei MAC Address
{
inizio = true;
continue;
}
if (inizio == true)
{
foreach (string mca in sMacAddress)
{
if (linea.Contains(mca.ToLower()))
{
MetroFramework.MetroMessageBox.Show(this, "Your computer may be infected!!", "ATTENTION", MessageBoxButtons.OK, MessageBoxIcon.Error);
infetto = true;
break;
}
}
}
}
if (infetto == false)
{
MetroFramework.MetroMessageBox.Show(this, "Your computer is clear :)", "All done !", MessageBoxButtons.OK, MessageBoxIcon.Question);
}
}
}
In altre parole, puoi dichiarare che il tuo PC è pulito, solo dopo che hai finito i controlli su tutte le linee del file
Ti ringrazio nuovamente, funziona tutto, l'unico problema è: nel "mac show" uno dei pulsanti che ho messo, dovrei a questo punto stampare la lista che tu hai creato. Momentaneamente ho trovato questa soluzione, ma sembra dare qualche problemino. Mi ci immergo nuovamente, ma se per caso sai dove sto sbagliando mi faresti un favore! MANCA POCOOOOO
l'errore generato da questa mia funzione è il seguente: System.Collections.Generic.List`1[System.String]
// carico i mac address
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
List<string> sMacAddress = new List<string>(); //in questa lista ci andranno tutti i MAC Address del PC
foreach (NetworkInterface adapter in nics)
{
string sMac = adapter.GetPhysicalAddress().ToString();
if (sMac.Length == 0)
break;
sMacAddress.Add(sMac.Substring(0, 2) + ":" + sMac.Substring(2, 2) + ":" + sMac.Substring(4, 2) + ":" + sMac.Substring(6, 2) + ":" + sMac.Substring(8, 2) + ":" + sMac.Substring(10, 2));
}
// teorica funzione per stampare
StringBuilder sb = new StringBuilder();
foreach (NetworkInterface adapter in nics)
{
sb.AppendLine(sMacAddress.ToString());
}
MetroFramework.MetroMessageBox.Show(this, sb.ToString(), "Your MAC ADDRESS", MessageBoxButtons.OK, MessageBoxIcon.Information);
}