Modifier l'adresse IP avec C# et .NET 6.0

MisterHolk - 12 mars 2022 à 02:52
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 17 mars 2022 à 13:39
Bonjour,

Je sui entrain de créer une application pour mon père afin qu'il puisse voir et modifier l'adresse IP de son PC. Mais je bloque sur la façon de retourner la valeur qui me permet d'obtenir l'IP dans ma textbox, car la variable qui contient l'IP est en lecture seule.

J'ai essayé les codes que j'ai pu trouver et qui permettent le changement de l'IP tout comme le code qui permet de retirer la lecture seule mais ça fonctionne pas du tout.

Vous avez des idées ?

Mon code c'est ça:
using System.Net.NetworkInformation;
using System.Net.Sockets;

namespace NUTs___Network_Utility_Tools
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
            switchtoen_menuBtn.Enabled = false;

        }

        private void chng_FR(object sender, EventArgs e)
        {
            #region form_Content
            this.Text = "NUTs - un utilitaire réseau";
            language_menuItem.Text = "Langue";
            switchtofr_menuBtn.Text = "Passer en français";
            switchtoen_menuBtn.Text = "Passer en anglais";
            switchtofr_menuBtn.Enabled = false;
            switchtoen_menuBtn.Enabled = true;
            #endregion

            #region chng_FR_Tab
            networkinfos_tabPage.Text = "Vos informations réseau";
            changeparameters_tabPage.Text = "Changer vos paramètres réseau";
            ip_richTxtBx1.Text = "Adresse IP";
            ip_richTxtBx2.Text = "Adresse IP";
            subnetmask_richTxtBx1.Text = "Masque de sous réseau";
            subnetmask_richTxtBx2.Text = "Masque de sous réseau";
            defgateway_richTxtBx1.Text = "Passerelle par défaut";
            defgateway_richTxtBx2.Text = "Passerelle par défaut";
            primdns_richTxtBx1.Text = "Adresse DNS primaire";
            primdns_richTxtBx2.Text = "Adresse DNS primaire";
            secdns_richTxtBx1.Text = "Adresse DNS secondaire";
            secdns_richTxtBx2.Text = "Adresse DNS secondaire";
            retrieveinfos_Btn.Text = "RECUPERER INFOS";
            applyparams_Btn.Text = "APPLIQUER PARAMETRES";
            ip_TxtBx1.Text = "";
            subnetmask_TxtBx1.Text = "";
            defgateway_TxtBx1.Text = "";
            primdns_TxtBx1.Text = "";
            secdns_TxtBx1.Text = "";
            #endregion
        }

        private void chng_EN(object sender, EventArgs e)
        {
            #region form_Content
            this.Text = "NUTs - a network utility tool";
            language_menuItem.Text = "Language";
            switchtofr_menuBtn.Text = "Switch to french";
            switchtoen_menuBtn.Text = "Switch to english";
            switchtofr_menuBtn.Enabled = true;
            switchtoen_menuBtn.Enabled = false;
            #endregion

            #region chng_EN_Tab
            networkinfos_tabPage.Text = "Your network informations";
            changeparameters_tabPage.Text = "Change your network parameters";
            ip_richTxtBx1.Text = "IP Address";
            ip_richTxtBx2.Text = "IP Address";
            subnetmask_richTxtBx1.Text = "Subnet mask";
            subnetmask_richTxtBx2.Text = "Subnet mask";
            defgateway_richTxtBx1.Text = "Default gateway";
            defgateway_richTxtBx2.Text = "Default gateway";
            primdns_richTxtBx1.Text = "Primary DNS address";
            primdns_richTxtBx2.Text = "Primary DNS address";
            secdns_richTxtBx1.Text = "Secondary DNS address";
            secdns_richTxtBx2.Text = "Secondary DNS address";
            retrieveinfos_Btn.Text = "RETRIEVE INFOS";
            applyparams_Btn.Text = "APPLY PARAMETERS";
            ip_TxtBx1.Text = "";
            subnetmask_TxtBx1.Text = "";
            defgateway_TxtBx1.Text = "";
            primdns_TxtBx1.Text = "";
            secdns_TxtBx1.Text = "";
            #endregion
        }

        #region retrieve_infos
        private void retrieve_Infos(object sender, EventArgs e)
        {
            foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 && adapter.OperationalStatus == OperationalStatus.Up || adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && adapter.OperationalStatus == OperationalStatus.Up)
                {
                    foreach (UnicastIPAddressInformation ip in adapter.GetIPProperties().UnicastAddresses)
                    {
                        if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            ip_TxtBx1.Text = (ip.Address.ToString());
                            subnetmask_TxtBx1.Text = (ip.IPv4Mask.ToString());
                        }
                    }
                    foreach (GatewayIPAddressInformation defgateway in adapter.GetIPProperties().GatewayAddresses)
                    {
                        defgateway_TxtBx1.Text = (defgateway.Address.ToString());
                    }
                }
            }

            if (switchtoen_menuBtn.Enabled == false && switchtofr_menuBtn.Enabled == true)
            {
                primdns_TxtBx1.Text = "Not implemented yet";
                secdns_TxtBx1.Text = "Not implemented yet";
            }
            else
            {
                primdns_TxtBx1.Text = "Pas encore implémenté";
                secdns_TxtBx1.Text = "Pas encore implémenté";
            }
        }
        #endregion

        #region change_infos
        private void apply_parameters(object sender, EventArgs e)
        {
            foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
            {
                if (adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 && adapter.OperationalStatus == OperationalStatus.Up || adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && adapter.OperationalStatus == OperationalStatus.Up)
                {
                    foreach (UnicastIPAddressInformation ip in adapter.GetIPProperties().UnicastAddresses)
                    {
                        if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
                        {
                            ip.Address = ip_TxtBx2.Text;
                            ip.IPv4Mask = subnetmask_TxtBx2;
                        }
                    }
                    foreach (GatewayIPAddressInformation defgateway in adapter.GetIPProperties().GatewayAddresses)
                    {
                        defgateway.Address = defgateway_TxtBx2.Text;
                            
                    }
                }
            }
        }
        #endregion

    }

}

8 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
12 mars 2022 à 08:02
0
Bonjour,

J'ai essayé chaque page une par une en l'adaptant à mon code actuel et rien n'y fait.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
12 mars 2022 à 21:00
0
Justement je prends exemple sur ça. Mais la différence réside dans le fait qu'il est un fichier de propriétés. Fichier que je ne possède pas.

Si j'en créer un, est ce que je peux faire appel au texte des mes textbox ?
0
Ce que j'ai fait, c'est que j'ai créer des public string.

Mais je dois avoir une erreur dans ma façon de penser car voici mon code actuel:

        private void apply_parameters(Button sender, EventArgs e, string arg)
        { 
            foreach (NetworkInterface Ethadapter in NetworkInterface.GetAllNetworkInterfaces())
            {

                if (Ethadapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && Ethadapter.OperationalStatus == OperationalStatus.Up)
                {
                    ipAddress = ip_richTxtBx2.Text;
                    subnetMask = subnetmask_TxtBx2.Text;
                    defGateway = defgateway_TxtBx2.Text;
                    primDNS = primdns_TxtBx2.Text;
                    secDNS = secdns_TxtBx2.Text;

                    ProcessStartInfo psi = new ProcessStartInfo("cmd.exe");
                    psi.UseShellExecute = true;
                    psi.WindowStyle = ProcessWindowStyle.Hidden;
                    psi.Verb = "runas";
                    psi.Arguments = ("/c netsh interface ip set address \"" + Ethadapter + "\" static " + ipAddress + " " + subnetMask + " " + primDNS + " & netsh interface ip set dns \"" + Ethadapter + "\" static " + primDNS);
                    Process.Start(psi);
                }
            }
        }


Cette partie ne me renvoie rien. cmd.exe ne se lance pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
13 mars 2022 à 18:14
Justement je prends exemple sur ça
Ha ben ton code ne ressemble en rien au projet vers lequel je t'ai orienté.....

ET le fichier de config ne sert qu'à stocker des valeurs prédéfinies, tu peux t'en passer sans problèmes.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
13 mars 2022 à 19:14
En soit ce n'est pas la façon de penser ce code qui est le problème, mais le fait que tu te sois probablement lancé dans ce projet avant d'avoir appris les bases.
Par ce que si tu connaissais ces bases, tu n'aurais pas écrit ce code.

Comme je n'ai pas envie de réécrire 100 fois les mêmes choses, je t'invite à lire ceci (à replacer dans
https://codes-sources.commentcamarche.net/forum/affich-10107640-probleme-de-recuperation-de-donnees-dans-la-base-de-donnee#6

Et puis, un peu après https://codes-sources.commentcamarche.net/forum/affich-10107640-probleme-de-recuperation-de-donnees-dans-la-base-de-donnee#10

0
Bonjour Whismeril,

J'ai enfin pu terminer ce projet et tout fonctionne parfaitement.

Mon problème résidé en faite dans le fait que j'essayais de taper une commande avec une mauvaise syntaxe.

J'ai donc lu et relu la page Microsoft Doc sur ladite commande et c'est OK.

Merci en tout cas pour ton aide !
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
17 mars 2022 à 13:39
Oui une mauvaise syntaxe certes.

Mais le problème de fond c’est que t’as pas compris ce qu’est un objet.
Or l’objet c’est l’essence de C# donc sans comprendre tu ne pourras jamais bien coder.
Bidouiller oui dans une certaine mesure.

C’est pourquoi je t’ai orienté vers une autre discussion où le problème est le même et dans laquelle j’ai conseillé la lecture d’un cours à maintes reprises.
0
Rejoignez-nous