Menu

Gestionnaire de cartes réseaux

13 avril 2019 - Gestionnaire de cartes réseau, Projet, Réseau

Pour ce premier projet, je souhaitais réaliser une application WPF me permettant de manager les interfaces réseaux du PC ainsi qu’afficher les informations d’une carte réseau en particulier.

Fonctionnement

Je peux afficher toutes les cartes réseaux

Pour cela, j’ai utilisé une commande (SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL) qui retourne toutes les cartes réseaux du PC.

Je peux afficher les infos d’une carte réseau en particulier

Ce qui est intéressant avec le type d’objet retourné par l’utilisation de la commande d’au-dessus, c’est qu’il y a pleins de champs comportants des informations comme par exemple la vitesse, l’adresse MAC, l’adresse IP, le nom de la carte, le nom du réseau, etc…

Il me suffit donc d’afficher chaque champ que je trouve utile dans un label.

Je peux séparer les cartes réseaux activées de celles désactivées

Pour le faire, il m’a suffit de créer une méthode public bool Etat()qui retourne true si la carte en cours est activée et falsesi la carte en cours est désactivée.

A partir de ça, je n’ai qu’a, lorsque je liste toutes les cartes réseaux, les séparer en fonction du retour de cette méthode.

Je peux activer ou désactiver les cartes réseaux

Pour manipuler l’état des cartes réseaux, j’ai du utiliser la commande batch netsh interface set interface "nom de l'interface" enable/disable qui m’a permis d’activer ou désactivé la carte via son nom.

Captures d’écran

Gestion des cartes réseaux selon leur état

Téléchargement

Attention ! L’exécutable a besoin d’être lancé avec les droits d’administrateurs pour pouvoir activer/désactiver les cartes réseaux.

Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace CartesReseau
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        ManagementObject niInterface; //Interface en cours

        public MainWindow()
        {
            InitializeComponent();
            DetecterCartes();
        }

        /// <summary>
        /// Permet de détecter toutes les cartes du PC (allumées ou éteintes)
        /// </summary>
        private void DetecterCartes()
        {
            //Au cas ou on a déjà détecté une fois, on garde en mémoire au cas ou rien n'a changé
            object oTemp = cbCartes.SelectedItem;
            List<string> lstAllume = new List<string>();
            List<string> lstEteint = new List<string>();
            foreach (string item in lbAllumé.Items)
            {
                lstAllume.Add(item);
            }
            foreach (string item in lbEteint.Items)
            {
                lstEteint.Add(item);
            }
            List<string> lstAllumeTemp = new List<string>();
            List<string> lstEteintTemp = new List<string>();
            cbCartes.Items.Clear();
            ManagementObjectSearcher searchProcedure = Procedure(); //Récupération des cartes
            foreach (ManagementObject nic in searchProcedure.Get())
            {
                cbCartes.Items.Add(nic["netConnectionId"]);
                niInterface = nic;
                if (Etat())
                {
                    lstAllumeTemp.Add(nic["netConnectionId"].ToString());
                }
                else
                {
                    lstEteintTemp.Add(nic["netConnectionId"].ToString());
                }
            }

            if (lstAllume != lstAllumeTemp || lstEteint != lstEteintTemp)
            {

                lbAllumé.Items.Clear();
                lbEteint.Items.Clear();

                foreach (string item in lstAllumeTemp)
                {
                    lbAllumé.Items.Add(item);
                }

                foreach (string item in lstEteintTemp)
                {
                    lbEteint.Items.Add(item);
                }
            }
            cbCartes.SelectedItem = oTemp;
            if(cbCartes.SelectedItem == null)
            {
                cbCartes.SelectedItem = cbCartes.Items[0];
            }
        }

        /// <summary>
        /// Bouton de test, permet d'activer ou non la carte
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAction_Click(object sender, RoutedEventArgs e)
        {
            if (!Etat())        //Si la carte est activée, on la désactive, sinon on l'active
            {
                Enable(cbCartes.SelectedItem.ToString());
            }
            else
            {
                Disable(cbCartes.SelectedItem.ToString());
            }
            BoutonCouleur();    //Affichage
        }

        /// <summary>
        /// Changement de carte réseau en cours
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbCartes_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cbCartes.Items.Count == 0) { return; }
            ManagementObjectSearcher searchProcedure = Procedure();
            foreach (ManagementObject nic in searchProcedure.Get())
            {
                if(cbCartes.SelectedItem.ToString() == nic["netConnectionId"].ToString())
                {
                    niInterface = nic;
                }
            }
            Infos();
            BoutonCouleur();
        }

        /// <summary>
        /// Change la couleur des boutons et le texte
        /// </summary>
        public void BoutonCouleur()
        {
            if (Etat())
            {
                btnAction.Content = "Allumé";
                btnAction.Background = Brushes.Green;
            }
            else
            {
                btnAction.Content = "Eteint";
                btnAction.Background = Brushes.Red;
            }
        }

        /// <summary>
        /// Permet de voir si la carte réseau est activée ou pas
        /// </summary>
        /// <returns>true si activée,false sinon</returns>
        public bool Etat()
        {
            ManagementObjectSearcher searchProcedure = Procedure();
            foreach (ManagementObject nic in searchProcedure.Get())
            {
                string sDeviceIdNic = nic["deviceid"].ToString();
                string sDeviceIdNiInterface =niInterface["deviceid"].ToString();
                if (sDeviceIdNic==sDeviceIdNiInterface )
                {
                    if ((UInt16)nic["NetConnectionStatus"] != 0 || (bool)nic["NetEnabled"])
                    {
                        return true;
                    }
                }
            }
            return false;
        }

        /// <summary>
        /// Active une carte réseau
        /// </summary>
        /// <param name="interfaceName">Nom de la carte réseau</param>
        static void Enable(string interfaceName)
        {
            System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" enable");
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo = psi;
            p.Start();
        }

        /// <summary>
        /// Désactive une carte réseau
        /// </summary>
        /// <param name="interfaceName">Nom de la carte réseau</param>
        static void Disable(string interfaceName)
        {
            System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" disable");
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo = psi;
            p.Start();
        }

        /// <summary>
        /// Permet d'afficher les infos de l'adaptateur réseau en cours
        /// </summary>
        private void Infos()
        {
            string sInfos = "";
            string sRetour = "\n";
            sInfos += "Nom de l'interface     :         " + niInterface["netConnectionId"] + sRetour;
            sInfos += "===============================================" + sRetour;
            sInfos += "Description            :         " + niInterface["Description"] + sRetour;
            sInfos += "ID de l'interface      :         " + niInterface["deviceId"]+sRetour;
            sInfos += "Type d'interface       :         " + niInterface["AdapterType"] + sRetour;
            try
            {
                sInfos += "Vitesse                :         " + ((UInt64)niInterface["Speed"] / 1024 / 1024 / 8) + "Mbps" + sRetour;
            }
            catch
            {

            }
            sInfos += "Adresse MAC            :         " + niInterface["MACAddress"] + sRetour;
            sInfos += "Connecté à un réseau   :         " + niInterface["NetEnabled"].ToString() + sRetour;
            lblInfos.Content = sInfos;
        }

        /// <summary>
        /// Bouton de test, permet de raffraichir les infos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            DetecterCartes();
            BoutonCouleur();
            Infos();
        }

        /// <summary>
        /// Quand on désactive une carte réseau
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lbAllumé_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbAllumé.Items.Count == 0) { return; }
            ManagementObjectSearcher searchProcedure = Procedure();
            foreach (ManagementObject nic in searchProcedure.Get())
            {
                string sDeviceIdNic = nic["netConnectionId"].ToString();
                if (sDeviceIdNic == lbAllumé.SelectedItem.ToString())
                {
                    Disable(sDeviceIdNic);
                }
            }
            DetecterCartes();
        }

        /// <summary>
        /// Quand on active une carte réseau
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lbEteint_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (lbEteint.Items.Count == 0) { return; }
            ManagementObjectSearcher searchProcedure = Procedure();
            foreach (ManagementObject nic in searchProcedure.Get())
            {
                string sDeviceIdNic = nic["netConnectionId"].ToString();
                if (sDeviceIdNic == lbEteint.SelectedItem.ToString())
                {
                    Enable(sDeviceIdNic);
                }
            }
            DetecterCartes();
        }

        /// <summary>
        /// Options de test
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.OemTilde)
            {
                if (btnRefresh.Visibility == System.Windows.Visibility.Hidden)
                {
                    btnRefresh.Visibility = System.Windows.Visibility.Visible;
                    btnAction.Visibility = System.Windows.Visibility.Visible;
                }
                else
                {
                    btnRefresh.Visibility = System.Windows.Visibility.Hidden;
                    btnAction.Visibility = System.Windows.Visibility.Hidden;
                }
            }
        }

        /// <summary>
        /// Permet d'avoir une liste de tous les network adapters
        /// </summary>
        /// <returns>ManagementObjectSearcher avec tous les networks adapters</returns>
        public ManagementObjectSearcher Procedure()
        {
            SelectQuery wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
            ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(wmiQuery);
            return searchProcedure;
        }
    }
}

 

14
Poster un commentaire

avatar
8 Fils de commentaires
6 Réponses de fil
0 Abonnés
 
Commentaire avec le plus de réactions
Le plus populaire des commentaires
9 Auteurs du commentaire
asdffLaurent xdAurélienALERTEKoda CSGO Auteurs de commentaires récents
  S’abonner  
plus récent plus ancien Le plus populaire
Notifier de
DoriGill
Invité
DoriGill

yo trop cool

AUreBloc
Invité
AUreBloc

J’avou

Pas un fake
Invité
Pas un fake

une petite merveille qui va me simplifier la vie
Merci cher collaborateur programmeur

BenoGeno
Invité
BenoGeno

Horrifiant ! Ce software a formaté mon disque dur de stockage ! Je ne recommande pas… 3/20 (Le design est sympa, néanmoins)

Filou
Invité
Filou

olala

XGOD
Invité
XGOD

truc de ouf ton code tu peux hack mon école stp frere

Koda CSGO
Invité
Koda CSGO

Si jamais si y a un certain « BenoGeno » qui commente, OUI c’est bien le génie que vous connaissez XD. Si vous voulez une preuve vous pouvez lui poser la question dans le bâtiment de l’eptm. (Il est sans doute en train de manger une salade)

Laurent xd
Invité
Laurent xd

toujours autant bof xd

asdff
Invité
asdff

Ta darrone la pute