J'ai un réseau d'entreprise, avec une configuration IP particulière sur le wifi, et je me connecte régulièrement sur des box ailleurs, chaque fois la configuration est différente. J'ai utilisé un moment la configuration alternative, mais c'est finalement pas évident à gérer. J'ai donc fais un petit script pour passer du DHCP à un adresse IP "fixe"
Le script demande pour passer en mode DHCP, si on répond non il demande si on veut passer en mode fixe
En mode fixe il utilise la commande ARP pour lister les adresses IP du réseau.
Une trame fixe est attribuée (ici 192.168.60.x) et x est fixé au départ à 11 (pour moi, fin de la plage des adresses importantes et fixes de mon réseau)
une comparaison est effectuée entre les résultats de la liste ARP et des adresses incrémentées de 192.168.60.11 à 192.168.60.254 pour en trouver une qui ne soit pas dans la liste. si le script en trouve une il l'attribue. Les autres paramètres (passerelle, dns métrique et masques) sont fixes
S'il ne trouve pas d'adresse disponible, il affiche un message d'erreur
Je ne suis pas développeur, je n'ai jamais suivi de cours et je code avec ce que je trouve sur des forums, et par logique. Mon code est imparfait, il ne le sera certainement jamais, mais je suis la pour des critiques constructives pour me permettre d'avancer. Merci!
Source / Exemple :
If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", Chr(34) & _
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1 'ouvrir le code en mode admin pour l'UAC de vista et seven
Else
reponse = MsgBox("Voulez vous passer en mode IP_AUTO?", vbQuestion + vbYesNo, "Configuration de la carte réseau") 'ouverture de la fenêtre et on demande si on veut passer en DHCP
If reponse = vbNo Then 'si réponse non
reponse1 = MsgBox("voulez vous passer en mode BBOX_WIFI_BUREAU?", vbQuestion + vbYesNo) 'on demande si on veut attribuer une adresse IP
If reponse1 = vbYes Then 'si réponse oui
MsgBox "t'as raison, y'a pas de mal à repasser en mode manuel de temps en temps!" 'message de confirmation
call manu() 'on apelle la fonction d'attribution de l'adresse IP
Else 'si réponse 2 non
MsgBox "Ok, mais arrête de m'appler pour rien boulet!" 'message de fin
End If 'fin du programme
Else 'si réponse 2 oui
MsgBox "ok, enlève ta culotte, c'est le DHCP qui pilote!", vbInformation 'message 2 de confirmation
call set_dhcp() 'on apelle la fonction de mise en place du DHCP
End If
End If
private sub manu()
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshProcessEnvironment = WshShell.Environment("Process")
LogonServer = WshProcessEnvironment("LogonServer")
ip = "192.168.60.254" 'adresse ip du routeur
z = 11 'valeur du dernier chiffre de l'adresse ip à partir duquel on va chercher à adresser
ip2 = "192.168.60." & z 'type d'adresse IP, c'est l'adresse IP de base
Set WshExec = WshShell.Exec("ping -n 4 -w 1000 " & ip) 'Ping pour construire la table ARP
WScript.Sleep(2000) 'pause 2 sec pour laisser ARP se construire
Set WshExec = WshShell.Exec("arp -a") 'Lister la table ARP
strPingResults = LCase(WshExec.StdOut.ReadAll) 'insèrer table ARP dans une variable
strARPList = Split(strPingResults) 'transformer la variable en tableau
n = UBound(strARPList,1) 'récupèrer la taille du tableau
For x = 0 to n 'pour toutes les lignes du tableau
if strARPList(x) = ip2 then call chgip() 'on cherche si l'adresse ip de base est présente, si oui on apelle la fonction chgip
if z>254 then call sortie() 'si l'ip arrive à .254 on apelle sortie
next 'message 'fin de la fonction
call chgadrss(ip2) 'si on trouve une IP diponible on apelle la fonction d'adressage 'on apelle la fonction chgadrss
end sub
private sub chgip()
z = z+1 'on incrémente z de 1
ip2 = "192.168.60." & z 'on crée la nouvelle adresse
end sub
private sub chgadrss(ip2)
strComputer = "." 'on indique qu'on cherche sur cet ordinateur
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") 'on sélectionne toutes les cartes réseau actives
strIPAddress = Array(ip2) 'on attribue l'adresse dispo trouvée précédement
strSubnetMask = Array("255.255.255.0") 'on attribue le masque réseau
strGateway = Array("192.168.60.254") 'on attribue la passerelle
strDNSServers = Array("192.168.60.254") 'on attribue le DNS
strGatewayMetric = Array(1) 'on attribue le métrique
For Each objNetAdapter in colNetAdapters 'pour chaque carte réseau
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask) 'on attribue une erreur à l'attribution d'ip et masque et on entre les valeurs
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric) 'on attribue une erreur à l'attribution de métrique et de passerelle et on entre les valeurs
errDOM = objNetAdapter.SetDNSServerSearchOrder(strDNSServers) 'on attribue une erreur à l'attribution du DNS et on entre les valeurs
If errEnable = 0 Then 'si pas d'erreurs
WScript.Echo "L'addresse IP a été correctement attribuée. L'adresse de ce poste est : " & ip2 'message de confirmation d'adressage
Else 'sinon
WScript.Echo "L'addresse n'a pas été changée il y a un Pb." 'message d'erreur
End If
next
end sub
private sub set_dhcp() 'fonction d'adressage par DHCP
strComputer = "." 'on indique qu'on cherche sur cet ordinateur
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") 'on sélectionne toutes les cartes réseau actives
For Each objNetAdapter In colNetAdapters 'pour chaque carte réseau
errEnable = objNetAdapter.EnableDHCP() 'on attribue une erreur à l'activation du DHCP et en active le service
arrDNSServers = Array() 'on attribue une erreur à l'attribution du DNS vide
objNetAdapter.SetDNSServerSearchOrder(arrDNSServers) 'on attribue le DNS
If errEnable = 0 Then 'si pas d'erreurs
WScript.Echo "L'addresse IP a été passée en auto." 'message de confirmation
Else 'sinon
WScript.Echo "L'addresse n'a pas été changée il y a un Pb." 'message d'erreur
End If
Next
end sub
private sub sortie() 'fonction de sortie de la boucle
MsgBox "t'as des baskets, tu rentres pas.. pas d'adresse IP disponible sur ce réseau" 'message d'erreur
exit sub
end sub
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.