Savoir l'adresse physique (mac) des cartes réseaux de l'ordinateur

Soyez le premier à donner votre avis sur cette source.

Vue 14 724 fois - Téléchargée 987 fois

Description

Ce bout de code sert a chercher les adresses physiques (MAC) des cartes réseaux installées sur la machine locale.

Le code utilise les classes du namespace System.Management pour interroger l'infrastructure WMI et savoir les informations sur les adaptateurs réseau.

J'ai mis les commentaires necessaires et j'espere que le code source est claire.

Source / Exemple :


using System;
using System.Management; 
using System.Windows.Forms;

namespace AdressesMAC
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }
        //Chargé de lister les noms des adaptateur réseau.
        private void FillNetworkAdapters() 
        { 
            ManagementClass mc; 
            //Creation d'une classe de gestion pour les adaptateurs de réseau 
            mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
            //Collection des adaptateurs gérés par la classe de gestion. 
            ManagementObjectCollection moc = mc.GetInstances();
            //Recherche des éléments actives qui ont des adresses IP. 
            foreach (ManagementObject o in moc)
            {
                if ((bool)o.GetPropertyValue("IPEnabled") == true) 
                { 
                    string strAdapter; 
                    // Prendre le nom de l'adaptateur. 
                    strAdapter = o.GetPropertyValue("Caption").ToString(); 
                    // Ajout dans le combobox 
                    cbxNetwokAdapters.Items.Add(strAdapter); 
                } 
            } 
        }

        //Cette fonction se charge de chercher l'addresse MAC d'une carte réseau sur la machine locale. 
        private string GetMACAddress(string Adapter) 
        { 
            ManagementClass mc; 
            mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
            ManagementObjectCollection moc = mc.GetInstances(); 
            //On cherche l'adaptateur passé en parametre pour la fonction 
            foreach (ManagementObject o in moc)
            {
                if ((bool)o.GetPropertyValue("IPEnabled") == true) 
                { 
                    string strAdapter;
                    strAdapter = o.GetPropertyValue("Caption").ToString(); 
                    //S'il est trouvé
                    if (strAdapter == Adapter) 
                        return o.GetPropertyValue("MacAddress").ToString(); 
                } 
            } 
            // Sinon 
            return string.Empty; 
        }

        private void cbxNetwokAdapters_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Mise a jour du textBox 
            lblMacAddress.Text = GetMACAddress(cbxNetwokAdapters.SelectedItem.ToString());
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            FillNetworkAdapters();
        }
    } 
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

ludovicbarman
Messages postés
11
Date d'inscription
jeudi 21 août 2008
Statut
Membre
Dernière intervention
23 août 2009
-
Pratique, merci ! 8/10
t_barbillon
Messages postés
341
Date d'inscription
mercredi 8 juin 2005
Statut
Membre
Dernière intervention
10 février 2009
2 -
Bonne source ; juste quelques commentaires : la propriété "caption" n'est pas forcément renseignée pour chaque carte. Dans ce cas, il y a risque d'exception de type "null reference" à la ligne 29.
Une idée d'amélioration : "caption" ne fournit pas le nom connu par l'utilisateur (celui indiqué dans la fenêtre des connexions réseaux), c'est dommage. Pour récupérer le nom utilisateur, il faut regarder dans la clé de registre "SYSTEM\CurrentControlSet\Control\Network\{{4D36E972-E325-11CE-BFC1-08002BE10318}}"Key"\Connection", la valeur "Name" où Key est le GUID de la carte réseau
almalouin
Messages postés
1
Date d'inscription
samedi 11 avril 2009
Statut
Membre
Dernière intervention
27 novembre 2010
-
Merci beaucoup pour ce petit bout de code fort utile ! Vous m'avez fait gagner beaucoup de temps, merci encore.
Merci à Y_BARBILLON pour sa critique constructive.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.