Confrontare mac address con una lista

di il
17 risposte

Confrontare mac address con una lista

Salve, sto creando un piccolo programmino in c#

Vorrei fare in modo che quando apro il programma, venga controllato che il macaddress del pc attuale, sia presente di una lista che io fornisco in formato txt. Attualmente ho pensato ad una soluzione simile, ma non essendo molto esperto mi sta dando alcuni problemi!

{
             GetMACAddress(); /* call function */

           // Read entire text file content in one string
            string text = File.ReadAllText("MAF.txt"); // leggiamo il file txt contenente tutti i mac
            
            int c = string.Compare(mca, text);
           
             MessageBox.Show(c); //message di debug, per vedere il risultato, con la funzione string compare dovrebbe essere boolean
}
Il problema è che la message mi dice che c è un int e non può essere castato in string...

Il mio problema è: come faccio a paragonare l'attuale mac address con tutta la lista dei mac che fornisco ? esiste una funzione per paragonare riga per riga ?

Source complete: https://github.com/Zenek-Hastro/Shadow-Hammer-MA

17 Risposte

  • Re: Confrontare mac address con una lista

    La variabile mca contiene il mac? E come ci arriva il mac?

    P.S. ti serve per una "protezione"? Se è così è abbastanza inutile ...
  • Re: Confrontare mac address con una lista

    I1) Il MAC del PC non è unico: ogni adattatore di rete ne ha uno. Leggi bene l'esempio di NetworkInterface
    https://docs.microsoft.com/it-it/dotnet/api/system.net.networkinformation.networkinterface?view=netframework-4.7.2

    2) Il file devi aprirlo con StreamReader e ovviamente la comparazione la dovresti fare con ogni singola riga del file.

    3) Dentro la MessageBox dovresti scriverci c.ToString()
  • Re: Confrontare mac address con una lista

    E soprattutto il mac può essere cambiato
  • Re: Confrontare mac address con una lista

    oregon ha scritto:


    La variabile mca contiene il mac? E come ci arriva il mac?

    P.S. ti serve per una "protezione"? Se è così è abbastanza inutile ...
    No, semplice controllo, ho scritto la funzione getmacaddress a parte !
  • Re: Confrontare mac address con una lista

    Weierstrass ha scritto:


    I1) Il MAC del PC non è unico: ogni adattatore di rete ne ha uno. Leggi bene l'esempio di NetworkInterface
    https://docs.microsoft.com/it-it/dotnet/api/system.net.networkinformation.networkinterface?view=netframework-4.7.2

    2) Il file devi aprirlo con StreamReader e ovviamente la comparazione la dovresti fare con ogni singola riga del file.

    3) Dentro la MessageBox dovresti scriverci c.ToString()
    Si infatti sto pensando a una soluzione per prendere tutti i mac address
    
    public void GetMACAddress()
            {
                
                NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                String sMacAddress = string.Empty;
                foreach (NetworkInterface adapter in nics)
                {
                    if (sMacAddress == String.Empty)// only return MAC Address from first card  
                    {
                        IPInterfaceProperties properties = adapter.GetIPProperties();
                        sMacAddress = adapter.GetPhysicalAddress().ToString();
                    }
                }
                mca = sMacAddress;
            }
    
  • Re: Confrontare mac address con una lista

    oregon ha scritto:


    E soprattutto il mac può essere cambiato
    Sisi, non è questo il problema !
  • Re: Confrontare mac address con una lista

    Aggiungo tutte le source, da poco ASUS è stata attaccata da un gruppo hacker. Il virus si attiva solo con determinati mac address, e io volevo fare un piccolo controllo se il computer della "vittima" fosse più o meno infetto. Non mi interessa che poi venga usato o meno, lo faccio per imparare !

    https://github.com/Zenek-Hastro/Shadow-Hammer-MA
  • Re: Confrontare mac address con una lista

    Zenek ha scritto:


    Aggiungo tutte le source, da poco ASUS è stata attaccata da un gruppo hacker. Il virus si attiva solo con determinati mac address, e io volevo fare un piccolo controllo se il computer della "vittima" fosse più o meno infetto. Non mi interessa che poi venga usato o meno, lo faccio per imparare !

    https://github.com/Zenek-Hastro/Shadow-Hammer-MA
    Letto adesso su internet della backdoor. Che dire, ormai non ci sono più parole per le aziende cino/coreane/taiwanesi.
  • Re: Confrontare mac address con una lista

    Weierstrass ha scritto:


    Zenek ha scritto:


    Aggiungo tutte le source, da poco ASUS è stata attaccata da un gruppo hacker. Il virus si attiva solo con determinati mac address, e io volevo fare un piccolo controllo se il computer della "vittima" fosse più o meno infetto. Non mi interessa che poi venga usato o meno, lo faccio per imparare !

    https://github.com/Zenek-Hastro/Shadow-Hammer-MA
    Letto adesso su internet della backdoor. Che dire, ormai non ci sono più parole per le aziende cino/coreane/taiwanesi.
    gia, comunque, continuo il mio sviluppo :3
  • Re: Confrontare mac address con una lista

    Ciao, vediamo se riesco ad aiutarti: il controllo puoi farlo per tutti MAC Address presenti nel tuo PC. Inoltre, devi considerare che l'istruzione:

    adapter.GetPhysicalAddress().ToString();

    ti restituisce una stringa esadecimale, in maiuscolo, senza i due punti ":" dopo ogni byte, che invece sono presenti nei MAC Address della lista nel file, che sono scritti in minuscolo. Infine, nel file, la lista dei MAC comincia dopo la riga "MAC - list", quindi devi arrivare là, e poi cominciare il confronto.
    
    	    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;
                    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()))
                                    MessageBox.Show("Il tuo MAC Address si trova nella lista!!!");
                    }
                }
    
  • Re: Confrontare mac address con una lista

    fabiocaruso ha scritto:


    Ciao, vediamo se riesco ad aiutarti: il controllo puoi farlo per tutti MAC Address presenti nel tuo PC. Inoltre, devi considerare che l'istruzione:

    adapter.GetPhysicalAddress().ToString();

    ti restituisce una stringa esadecimale, in maiuscolo, senza i due punti ":" dopo ogni byte, che invece sono presenti nei MAC Address della lista nel file, che sono scritti in minuscolo. Infine, nel file, la lista dei MAC comincia dopo la riga "MAC - list", quindi devi arrivare là, e poi cominciare il confronto.
    
    	    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;
                    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()))
                                    MessageBox.Show("Il tuo MAC Address si trova nella lista!!!");
                    }
                }
    
    Grazie mille Fabio per la risposta, provo immediatamente !!!
  • Re: Confrontare mac address con una lista

    fabiocaruso ha scritto:


    Ciao, vediamo se riesco ad aiutarti: il controllo puoi farlo per tutti MAC Address presenti nel tuo PC. Inoltre, devi considerare che l'istruzione:

    adapter.GetPhysicalAddress().ToString();

    ti restituisce una stringa esadecimale, in maiuscolo, senza i due punti ":" dopo ogni byte, che invece sono presenti nei MAC Address della lista nel file, che sono scritti in minuscolo. Infine, nel file, la lista dei MAC comincia dopo la riga "MAC - list", quindi devi arrivare là, e poi cominciare il confronto.
    
    	    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;
                    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()))
                                    MessageBox.Show("Il tuo MAC Address si trova nella lista!!!");
                    }
                }
    
    Allora, ho fatto un copy paste molto fast, e l ho leggermente riadattato, tuttavia non funziona, una volta cliccato il pulsante il programma non fa nulla ... come se il bottone non avesse codice ... continuo a cercare
    
    private void metroButton1_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;
                    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);
                                }
                                else
                                {
                                    MetroFramework.MetroMessageBox.Show(this, "Your computer is clear :)", "All done !", MessageBoxButtons.OK, MessageBoxIcon.Question);
                                }
                    }
                }
    
  • Re: Confrontare mac address con una lista

    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
  • Re: Confrontare mac address con una lista

    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 molto, funziona! ora lo riadatto anche per lo show del mac address !!
Devi accedere o registrarti per scrivere nel forum
17 risposte