Script changer ip fixe / ip auto

Soyez le premier à donner votre avis sur cette source.

Vue 6 758 fois - Téléchargée 576 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
14779
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 avril 2021
154
Cela est vraisemblablement à cause de votre serveur DHCP qui retourne toujours la même adresse, je pense.
Messages postés
32046
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 avril 2021
345
Bonjour,
Comme tu peux le voir... cette source date de 2012...
Je pense que si des modifications avaient été faites par son auteur..; elles y seraient depuis longtemps....

Par contre concernant la remarque :
le script attribut toujours la même IP
Il y a des chances que cela soit normal..... il prend le première disponible... donc si c'est toujours la même qui est dispo;. il prendra toujours celle là....
De plus... il a utiliser un certain nombre de valeurs "fixes" dans son script... qui ne correspondent peut être pas à la configuration de votre réseau.....
le script attribut toujours la même IP. avez vous réglé le problème?
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
Bonjour,
je suis un peu étonné du fait que le arp local vous retourne toutes les adresses du réseau, surtout celles sur lesquelles aucune connexion n'a été faite...
Est-ce que le ping du routeur à quelque chose à voir avec ce phénomène ?

J'ai un bout de code à faire depuis pas mal de temps pour trouver les IP disponibles sur mon lan et je me disais que cela pourrait être l'occasion.
Cordialement.

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.