[Ex] Configuration IP Alternative DHCP

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

[Ex] Configuration IP Alternative DHCP

#1

Message par jguinch »

Bonjour
Je post ici un script que j'ai fait, qui pourrait être utile à quelqu'un d'autre que moi...

Dans le cadre de mon travail, j'ai eu besoin de gérer "dynamiquement" la configuration IP alternative de la carte réseau avec une contrainte : la configuration alternative doit être la dernière configuration IP fonctionnelle obtenue.

Pour info (pour ce qui ne connaissent pas), la configuration IP alternative sert à obtenir une configuration IP même si aucun serveur DHCP ne répond. Cela permet dans mon cas de mettre en place une solution de secours en cas de défaillance du serveur DHCP et/ou du Firewall, tout en étant sûr de ne pas provoquer de conflit d'adresse IP(car environ 50 postes dans cette salle).

Le script doit s'exécuter sur chaque poste à l'ouverture de session : on utilise l'option -install pour cela.
Désolé si c'est pas clair, c'est pas évident à expliquer.... :?

N'hésitez pas à laisser vos commentaires ...


Code : Tout sélectionner

#NoTrayIcon
Break (0)

If NOT IsAdmin() Then
    $login = "administrateur"
    $passw = "P@ssW0rd!"
    RunAs($login, @ComputerName, $passw, 0, @ScriptFullPath, @ScriptDir )
    Exit
EndIf

If $CmdLine[0] == 1 Then
    If $CmdLine[1] == "-install" Then
        RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Run", "DHCPSecours", "REG_SZ", @ScriptFullPath)
        Exit
    EndIf
EndIf
    



; Lecture du fichier de configuration
$alternateMasque = "255.255.255.0"
$alternateGW = "192.168.1.1"
$alternateDNS1 = "192.168.1.253"
$alternateDNS2 = "192.168.1.254"


; Avant de commencer, on effectue un ping de la passerelle afin de verifier qu'on a bien de reseau
; On attend une minute, histoire que le DHCP ait attribué une adresse
$wait = 1
$debut = TimerInit()
While TimerDiff($debut) < 60000
    If Ping($alternateGW) > 0 Then
        $wait = 0
        ExitLoop
    EndIf
    Sleep(5000)   ; On attend 5 secondes avant de tester a nouveau
WEnd

; Si le temps d'attente est dépassé et qu'on a toujours pas de réseau, on quitte
If $wait Then Exit




;  Trouve l'identifiant de la carte réseau
$num = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards", 1)
$networkCardID = RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & $num, "ServiceName" )




$chaine0 = "0x32000000000000000400000000000000FFFFFF7F"
$chaine1 = "01000000000000000400000000000000FFFFFF7F"
$chaine2 = "03000000000000000400000000000000FFFFFF7F"
$chaine3 = "06000000000000000800000000000000FFFFFF7F"


; La chaine qui contient la configuration alternative complète
$chaine = $chaine0 & _IPToHex(@IPAddress1) & $chaine1 & _IPToHex($alternateMasque) & $chaine2 & _IPToHex($alternateGW) & $chaine3 & _IPToHex($alternateDNS1) & _IPToHex($alternateDNS2)

; On "écrit dans la base de registre la nouvelle configuration alternative
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp\Configurations\Alternate_" & $networkCardID, "options", "REG_BINARY", Binary($chaine) )

; On active la configuration alternative
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $networkCardID, "ActiveConfigurations", "REG_MULTI_SZ", "Alternate_" & $networkCardID)







Func _IPToHex($IP)
    $decoupeIP = StringSplit($IP, ".")
    $hexIP1 = StringRight(hex($decoupeIP[1]), 2)
    $hexIP2 = StringRight(hex($decoupeIP[2]), 2)
    $hexIP3 = StringRight(hex($decoupeIP[3]), 2)
    $hexIP4 = StringRight(hex($decoupeIP[4]), 2)

    ; Adresse IP en hexa à écrire dans la base de registre
    $IPHexa = $hexIP1 & $hexIP2 & $hexIP3 & $hexIP4
    return $IPHexa
EndFunc
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre