IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

API pour changer l'adresse IP


Sujet :

Windows

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut API pour changer l'adresse IP
    Bonjour,

    Je cherche une API qui permet de changer l'adresse IP. Une première recherche sur Developpez.com m'a permit de découvrir l'API WMI "Win32_NetworkAdapterConfiguration" mais en existe-t-il une autre ?
    De même, existe-t-il une API qui permet de changer le nom de la machine ?

    Merci!

  2. #2
    Membre expérimenté Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour,
    Tu peux utiliser la commande DOS : IPCONFIG /RENEW
    Essaye de le lancer dans un shell par exemple
    Ingénieur Multimédia - TMM Communication

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    Tu peux utiliser la commande DOS : IPCONFIG /RENEW
    Essaye de le lancer dans un shell par exemple
    Mais la commande IPCONFIG ne permet pas de spécifier d'autres valeurs ou je me trompe ? Le PC qui sera à configurer ne fonctionnera pas dans le contexte d'un DHCP et de plus veux attribuer une adresse IP bien précise.

  4. #4
    Membre expérimenté Avatar de LaChips
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 109
    Points : 1 482
    Points
    1 482
    Par défaut
    Au contraire, cette fonction n'est utilisable que dans le cas d'utilisation d'un DHCP.
    Mais pour affecter une IP fixe je ne sais pas...
    Ingénieur Multimédia - TMM Communication

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    En ce qui concerne le changement de nom du PC, l'API SetComputerName() de Windows System Information semble être la bonne.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Points : 89
    Points
    89
    Par défaut
    Après avoir passer beaucoup de temps à chercher une solution au même problème que le tien, j'ai finalement utiliser l'API WMI "Win32_NetworkAdapterConfiguration". Je pense que c'est ce qu'il y a de plus simple, et même, de plus "propre".

    Le pb par l'utilisation des comandes DOS, c'est qu'il te faut le nom de la connexion ; par exemple "Connexion au réseau local". C'est un nom qui peut être changé à tout moment par tout utilisateur du PC.

    Je peux te laisser du code C# si ça t'interesse. Mais je pense que tu as tout sous
    http://www.google.fr/search?hl=fr&q=...e+Google&meta=

    Nico
    Strasbourg

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    Bon, comme je n'aime pas faire du COM en C/C++ car c'est souvent vite compliqué, j'essaye d'éviter tout ce qui est WMI...

    Résultat de mes recherches, il y a deux autre méthodes, évidemment non documentées par MS, pour modifier l'adresse IP. Hélas cela rend tout ça ni très "propre" ni très portable d'une version de Windows à l'autre mais ça peut dépanner certains d'entre nous.

    Première méthode:
    Il existe une API non officielle et non documentée dans MSDN. Cette API est dans la DLL iphlpapi.dll et elle s'appelle SetAdapterIpAddress().
    Voici un exemple de code pour l'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    typedef DWORD (WINAPI *PSETADAPTERIPADDRESS)(const char*,DWORD,DWORD,DWORD,DWORD);
    
    /*
     * SetIpAddress
     * Fixe l'adresse IP d'une carte réseau
     * Entrée -> AdapterGUID: GUID de la carte réseau, ex {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
     *        -> DHCP: 0 si IP statique, 1 si IP dynamique
     *        -> IPAddress: adresse ip au format binaire
     *        -> SubnetMask: masque sous-réseau au format binaire
     *        -> Gateway: passerelle au format binaire
     * Sortie <- 0 si réussite ou numéro d'erreur Windows (à vérifier...)
     */
    DWORD SetIpAddress(const char* AdapterGUID,DWORD DHCP,DWORD IPAddress,DWORD SubnetMask,DWORD Gateway)
    {
       DWORD Error;
       HINSTANCE HndLib;
       PSETADAPTERIPADDRESS SetAdapterIpAddress;
    
       Error = ERROR_NOT_SUPPORTED;
       // Chargement de la DLL
       HndLib = (HINSTANCE)LoadLibrary(TEXT("iphlpapi.dll"));
       if(HndLib != NULL)
       {
          // Récupération de l'adresse de la procédure
          SetAdapterIpAddress = (PSETADAPTERIPADDRESS)GetProcAddress(HndLib,"SetAdapterIpAddress");
          if(SetAdapterIpAddress != NULL)
          {
                // Appel de la procédure
                Error = SetAdapterIpAddress(AdapterGUID,DHCP,IPAddress,SubnetMask,Gateway);
          }
       }
    
       return Error;
    }
    Vous remarquerez que la fonction n'a pas de version Unicode. Je l'ai testée avec Windows 2000 et Windows XP et à priori pas de problème. A voir si elle existe aussi avec Windows 2000 Server, Windows 2003 Server et Windows Vista.


    Seconde méthode:
    Modifier les valeurs dans la base de registre.
    Il y a plusieurs entrées à changer, et pour cela vous aurez besoin du GUID de l'adaptateur réseau (comme ci-dessus) qui peut être obtenu avec l'API GetAdaptersInfo().
    Vous pouvez aussi obtenir le GUID de la carte en regardant dans la base de registre. Chaque carte est référencée dans la clé HKLM\Software\Microsoft\Windows NT\CurrentVersion\NetworkCard\X où X est un numéro unique pour chaque carte. Typiquement c'est 0 pour la première carte installée, puis 1, etc... mais ce n'est pas toujours vrai et les numéros ne se suivent pas forcément (ce serait trop facile). Dans cette clé, la valeur ServiceName contient le GUID.
    Ensuite l'adresse IP apparaît à plusieurs endroits dans la base de registre, les deux clés suivantes étant celles qui nous intéressent:
    - HKLM\SYSTEM\CurrentControlSet\Services\{AdapterName}\Parameters\Tcpip
    - HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{AdapterName}
    A chaque fois il faut remplacer {AdapterName} par le GUID approprié et on trouve l'adresse IP dans la valeur IPAddress. Les curieux y trouveront d'autres valeurs toutes aussi intéressantes comme le masque sous-réseau, la passerelle, etc.
    Si la carte est configurée en DHCP, une autre clé de registre peut aussi être intéressante: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DHCP
    Enfin, selon la version de Windows, vous pouvez avoir à rebooter la machine après les modifications...

Discussions similaires

  1. [WD16] problème pour changer adresse ip d'un pc
    Par dinier dans le forum WinDev
    Réponses: 11
    Dernier message: 21/07/2011, 07h33
  2. Script pour Changer l'adresse IP WIFI
    Par hackoofr dans le forum VBScript
    Réponses: 2
    Dernier message: 10/05/2011, 18h58
  3. Changer d'adresses pour mes serveurs
    Par Ashleycole dans le forum Réseau
    Réponses: 4
    Dernier message: 01/12/2009, 16h39
  4. API pour changer le proxy du navigateur
    Par SteelBox dans le forum Windows
    Réponses: 2
    Dernier message: 16/02/2004, 23h15
  5. Réponses: 4
    Dernier message: 16/02/2004, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo