Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recuperer l'adresse IP de la passerelle par defaut

8 réponses
Avatar
Channels
bonjour,


Dans un script batch, je souhaite faire cela :

route add IP1 mask 255.255.255.255 IP_PASSERELLE
route change 0.0.0.0 mask 0.0.0.0 IP1

Cependant, mon IP_PASSERELLE est dynamique,

sous batch, je suis arrivé au maximum a faire un "route print | find /i
"passerelle par""
ce qui me sort
C:\>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:\>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a dire
recuperé que l'adresse IP, pour ensuite pouvoir faire un set et pouvoir
mettre cette variable dans ma ligne de commmande route add.

avec bash sous linux, la commande serais tail ou awk, cependant, cela
n'existe pas sous windows, auriez vous une idée de comment set cette
variable pour pouvoir faire cette route.

merci

--
Les fautes d'orthographes sus-citées sont déposées auprès de leurs
propriétaires respectifs.
Aucune responsabilité n'est engagée sur la lisibilité du message ou les
éventuels dommages qu'ils peuvent engendrer

8 réponses

Avatar
Jacques Barathon [MS]
"Channels" wrote in message
news:
<snip>
sous batch, je suis arrivé au maximum a faire un "route print | find /i
"passerelle par""
ce qui me sort
C:>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a dire
recuperé que l'adresse IP, pour ensuite pouvoir faire un set et pouvoir
mettre cette variable dans ma ligne de commmande route add.


Pour ma part j'utilise souvent la commande "for /f" pour ce genre de
découpage. Généralement on peut passer la commande qui génère l'affichage en
paramètre de "for /f" mais dans ton exemple il y a un pipe "|" qui oblige à
passer par un fichier intermédiaire:

C:>ipconfig | find /i "passerelle" > passerelle.txt
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p
192.168.0.1

Note qu'il reste un espace devant l'adresse, présent entre les deux points
et l'adresse dans l'affichage d'origine. J'utilise d'ailleurs ipconfig
plutôt que route print pour n'avoir qu'un espace. Si cet espace te gêne pour
les manips dont tu as besoin, tu peux repasser le résultat à la moulinette
de "for /f":

C:>ipconfig | find /i "passerelle" > passerelle.txt
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p >
passerelle.txt
C:>for /f %%p in (passerelle.txt) do echo %%p
192.168.0.1

Je sais, c'est très rustique et il y a sans doute mieux, mais au moins ça
marche.

Jacques

Avatar
Channels
Jacques Barathon [MS] a exprimé avec précision :
"Channels" wrote in message
news:
<snip>
sous batch, je suis arrivé au maximum a faire un "route print | find /i
"passerelle par""
ce qui me sort
C:>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a dire
recuperé que l'adresse IP, pour ensuite pouvoir faire un set et pouvoir
mettre cette variable dans ma ligne de commmande route add.


Pour ma part j'utilise souvent la commande "for /f" pour ce genre de
découpage. Généralement on peut passer la commande qui génère l'affichage en
paramètre de "for /f" mais dans ton exemple il y a un pipe "|" qui oblige à
passer par un fichier intermédiaire:

C:>ipconfig | find /i "passerelle" > passerelle.txt
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p
192.168.0.1

Note qu'il reste un espace devant l'adresse, présent entre les deux points et
l'adresse dans l'affichage d'origine. J'utilise d'ailleurs ipconfig plutôt
que route print pour n'avoir qu'un espace. Si cet espace te gêne pour les
manips dont tu as besoin, tu peux repasser le résultat à la moulinette de
"for /f":

C:>ipconfig | find /i "passerelle" > passerelle.txt
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p >
passerelle.txt
C:>for /f %%p in (passerelle.txt) do echo %%p
192.168.0.1

Je sais, c'est très rustique et il y a sans doute mieux, mais au moins ça
marche.

Jacques


Merci, ca peut etre sympa, mais a la seconde ligne, j'ai une erreur du
genre
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p >
passerelle.
txt
%%p était inattendu.

C:>

--
Les fautes d'orthographes sus-citées sont déposées auprès de leurs
propriétaires respectifs.
Aucune responsabilité n'est engagée sur la lisibilité du message ou les
éventuels dommages qu'ils peuvent engendrer


Avatar
Jacques Barathon [MS]
"Channels" wrote in message
news:
Merci, ca peut etre sympa, mais a la seconde ligne, j'ai une erreur du
genre
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p >
passerelle.
txt
%%p était inattendu.


Si tu testes mon exemple directement en ligne de commande, il faut que tu ne
mettes qu'un signe % devant les noms de variable (%p au lieu de %%p). La
syntaxe avec double pourcentage %%p est à utiliser dans un fichier de
commandes.

Jacques

Avatar
Channels
"Channels" wrote in message
news:
Merci, ca peut etre sympa, mais a la seconde ligne, j'ai une erreur du
genre
C:>for /f "delims=: tokens=2" %%p in (passerelle.txt) do echo %%p >
passerelle.
txt
%%p était inattendu.


Si tu testes mon exemple directement en ligne de commande, il faut que tu ne
mettes qu'un signe % devant les noms de variable (%p au lieu de %%p). La
syntaxe avec double pourcentage %%p est à utiliser dans un fichier de
commandes.

Jacques


C'est pire lol

C:>ipconfig | find /i "passerelle" > passerelle.txt

C:>for /f "delims=: tokens=2" %p in (passerelle.txt) do echo %p

:>echo 192.168.0.1
192.168.0.1

:>echo
Commande ECHO activée.

:>echo
Commande ECHO activée.

C:>


et si je test dans un script .cmd, il me met ca :

C:>ipconfig | find /i "passerelle" 1>passerelle.txt

C:>for /F "delims=: tokens=2" %p in (passerelle.txt) do echo %p
1>passerelle.t
xt

1>passerelle.txt .1

1>passerelle.txt

1>passerelle.txt

C:>for /F %p in (passerelle.txt) do echo %p

C:>echo Commande
Commande

C:>pause
Appuyez sur une touche pour continuer...

mon fichier passerelle.txt contient
Commande ECHO activ‚e.

--
Les fautes d'orthographes sus-citées sont déposées auprès de leurs
propriétaires respectifs.
Aucune responsabilité n'est engagée sur la lisibilité du message ou les
éventuels dommages qu'ils peuvent engendrer


Avatar
Jean-Claude BELLAMY
Dans le message news: ,
Channels s'est ainsi exprimé:

bonjour,


Dans un script batch, je souhaite faire cela :

route add IP1 mask 255.255.255.255 IP_PASSERELLE
route change 0.0.0.0 mask 0.0.0.0 IP1

Cependant, mon IP_PASSERELLE est dynamique,

sous batch, je suis arrivé au maximum a faire un "route print | find
/i "passerelle par""
ce qui me sort
C:>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a
dire recuperé que l'adresse IP, pour ensuite pouvoir faire un set et
pouvoir mettre cette variable dans ma ligne de commmande route add.

avec bash sous linux, la commande serais tail ou awk, cependant, cela
n'existe pas sous windows, auriez vous une idée de comment set cette
variable pour pouvoir faire cette route.


Utilise p.ex. la commande SETX !!!!!
Elle est faite pour çà ..


Elle fait partie du Resource Kit, mais est téléchargeable gratuitement :
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp

Attention : sa syntaxe est légèrement différente de SET (pas de signe "=")

SETX sert en particuleir à extraire des chaines à des endroits bien
spécifiques dans une liste de lignes. (p.ex. récupérer le TTL d'une commande
PING, ...)
L'aide intégrée est très complète. Taper "SETX /?" ou "SETX -i"

Dans ton cas, tu vas voir que c'est TRÈS SIMPEL à résoudre :

1) Générer un fichier texte contenant le résultat de la commande "Route
print" :
C:WINDOWSsystem32>route print >route.txt

2) Analyser (une fois pour toute) ce fichier pour énumérer
tous les "groupes" de caractères :
C:WINDOWSsystem32>setx TOTO -f route.txt -x

Commentaires :
"setx" exige dans tous les cas en paramètre le nom d'une variable
d'environnement, même si elle n'en a pas besoin.
Le nom "TOTO" est un nom quelconque (il ne sert à rien ici)
On aurait pu écrire "setx DUSCHMURZ -f route.txt -x"


Cela affiche la liste suivante (exemple obtenu chez moi. NB :j'ai
élagué!)
(0,0 ======================================....
(1,0 Liste) (1,1 d'Interfaces)
(2,0 0x1) (2,1 ...........................) (2,2 MS) (2,3 TCP) (2,4
Loopback) (2
,5 interface)
(3,0 0x2) (3,1 ...00) (3,2 0d) (3,3 61) (3,4 19) (3,5 3a) (3,6 f4) (3,7
......)
(3,8 Intel(R)) (3,9 PRO/100) (3,10 VE) (3,11 Network) (3,12 Connection)
(3,13 -)
.....
(18,4 1)
(19,0 Passerelle) (19,1 par) (19,2 défaut :) (19,3 192.168.0.2)
...

Pas très clair au premier abord, mais on voit quand même que ce qui est
intéressant (l'adresse de passerelle) se trouve en (19,3)
(19ème ligne, 3ème groupe) :

(19,3 192.168.0.2)

On pourrait donc demander à SETX de chercher le groupe (19,3),
mais cela ne serait pas universel (le n° de ligne dépend du nombre
de cartes réseau)

On va donc raisonner e relatif, par rapport à la chaine "Passerelle"
L'adresse IP est sur la même ligne que la chaine "Passerelle",
et est située à 3 groupes de distance
-> 0,3 de coordonnées relatives

3) Extraire directement dans une variable d'environnement ce groupe :
(j'ai appelé cette variable "GATEWAY")
C:WINDOWSsystem32>setx GATEWAY -f route.txt -r 0,3 "Passerelle" -m
Extracted value is: 192.168.0.2
NB : le switch "-m" est facultatif; Il sert à placer la variable dans
le contexte machine, et non pas user :
HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment
au lieu de
HKCUEnvironment



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
*

Avatar
Channels
Il se trouve que Jean-Claude BELLAMY a formulé :
Dans le message news: ,
Channels s'est ainsi exprimé:

bonjour,


Dans un script batch, je souhaite faire cela :

route add IP1 mask 255.255.255.255 IP_PASSERELLE
route change 0.0.0.0 mask 0.0.0.0 IP1

Cependant, mon IP_PASSERELLE est dynamique,

sous batch, je suis arrivé au maximum a faire un "route print | find
/i "passerelle par""
ce qui me sort
C:>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a
dire recuperé que l'adresse IP, pour ensuite pouvoir faire un set et
pouvoir mettre cette variable dans ma ligne de commmande route add.

avec bash sous linux, la commande serais tail ou awk, cependant, cela
n'existe pas sous windows, auriez vous une idée de comment set cette
variable pour pouvoir faire cette route.


Utilise p.ex. la commande SETX !!!!!
Elle est faite pour çà ..



Elle fait partie du Resource Kit, mais est téléchargeable gratuitement :

http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp

Attention : sa syntaxe est légèrement différente de SET (pas de signe "=")

SETX sert en particuleir à extraire des chaines à des endroits bien
spécifiques dans une liste de lignes. (p.ex. récupérer le TTL d'une commande
PING, ...)
L'aide intégrée est très complète. Taper "SETX /?" ou "SETX -i"

Dans ton cas, tu vas voir que c'est TRÈS SIMPEL à résoudre :

1) Générer un fichier texte contenant le résultat de la commande "Route
print" :
C:WINDOWSsystem32>route print >route.txt

2) Analyser (une fois pour toute) ce fichier pour énumérer
tous les "groupes" de caractères :
C:WINDOWSsystem32>setx TOTO -f route.txt -x

Commentaires :
"setx" exige dans tous les cas en paramètre le nom d'une variable
d'environnement, même si elle n'en a pas besoin.
Le nom "TOTO" est un nom quelconque (il ne sert à rien ici)
On aurait pu écrire "setx DUSCHMURZ -f route.txt -x"



Cela affiche la liste suivante (exemple obtenu chez moi. NB :j'ai
élagué!)
(0,0 ======================================....
(1,0 Liste) (1,1 d'Interfaces)
(2,0 0x1) (2,1 ...........................) (2,2 MS) (2,3 TCP) (2,4
Loopback) (2
,5 interface)
(3,0 0x2) (3,1 ...00) (3,2 0d) (3,3 61) (3,4 19) (3,5 3a) (3,6 f4) (3,7
......)
(3,8 Intel(R)) (3,9 PRO/100) (3,10 VE) (3,11 Network) (3,12 Connection)
(3,13 -)
.....
(18,4 1)
(19,0 Passerelle) (19,1 par) (19,2 défaut :) (19,3 192.168.0.2)
...

Pas très clair au premier abord, mais on voit quand même que ce qui est
intéressant (l'adresse de passerelle) se trouve en (19,3)
(19ème ligne, 3ème groupe) :

(19,3 192.168.0.2)

On pourrait donc demander à SETX de chercher le groupe (19,3),
mais cela ne serait pas universel (le n° de ligne dépend du nombre
de cartes réseau)

On va donc raisonner e relatif, par rapport à la chaine "Passerelle"
L'adresse IP est sur la même ligne que la chaine "Passerelle",
et est située à 3 groupes de distance
-> 0,3 de coordonnées relatives

3) Extraire directement dans une variable d'environnement ce groupe :
(j'ai appelé cette variable "GATEWAY")
C:WINDOWSsystem32>setx GATEWAY -f route.txt -r 0,3 "Passerelle" -m
Extracted value is: 192.168.0.2
NB : le switch "-m" est facultatif; Il sert à placer la variable dans
le contexte machine, et non pas user :
HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment
au lieu de
HKCUEnvironment


Ca a l'air pas mal, mais question conne, comment est deffini la
variable dans une ligne de commande ?

par exemple pour moi
route add blabla mask blabla %GATEWAY

--
Les fautes d'orthographes sus-citées sont déposées auprès de leurs
propriétaires respectifs.
Aucune responsabilité n'est engagée sur la lisibilité du message ou les
éventuels dommages qu'ils peuvent engendrer


Avatar
Channels
Channels avait énoncé :
Il se trouve que Jean-Claude BELLAMY a formulé :
Dans le message news: ,
Channels s'est ainsi exprimé:

bonjour,


Dans un script batch, je souhaite faire cela :

route add IP1 mask 255.255.255.255 IP_PASSERELLE
route change 0.0.0.0 mask 0.0.0.0 IP1

Cependant, mon IP_PASSERELLE est dynamique,

sous batch, je suis arrivé au maximum a faire un "route print | find
/i "passerelle par""
ce qui me sort
C:>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a
dire recuperé que l'adresse IP, pour ensuite pouvoir faire un set et
pouvoir mettre cette variable dans ma ligne de commmande route add.

avec bash sous linux, la commande serais tail ou awk, cependant, cela
n'existe pas sous windows, auriez vous une idée de comment set cette
variable pour pouvoir faire cette route.


Utilise p.ex. la commande SETX !!!!!
Elle est faite pour çà ..




Elle fait partie du Resource Kit, mais est téléchargeable gratuitement :

http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp

Attention : sa syntaxe est légèrement différente de SET (pas de signe "=")

SETX sert en particuleir à extraire des chaines à des endroits bien
spécifiques dans une liste de lignes. (p.ex. récupérer le TTL d'une
commande PING, ...)
L'aide intégrée est très complète. Taper "SETX /?" ou "SETX -i"

Dans ton cas, tu vas voir que c'est TRÈS SIMPEL à résoudre :

1) Générer un fichier texte contenant le résultat de la commande "Route
print" :
C:WINDOWSsystem32>route print >route.txt

2) Analyser (une fois pour toute) ce fichier pour énumérer
tous les "groupes" de caractères :
C:WINDOWSsystem32>setx TOTO -f route.txt -x

Commentaires :
"setx" exige dans tous les cas en paramètre le nom d'une variable
d'environnement, même si elle n'en a pas besoin.
Le nom "TOTO" est un nom quelconque (il ne sert à rien ici)
On aurait pu écrire "setx DUSCHMURZ -f route.txt -x"




Cela affiche la liste suivante (exemple obtenu chez moi. NB :j'ai
élagué!)
(0,0 ======================================....
(1,0 Liste) (1,1 d'Interfaces)
(2,0 0x1) (2,1 ...........................) (2,2 MS) (2,3 TCP) (2,4
Loopback) (2
,5 interface)
(3,0 0x2) (3,1 ...00) (3,2 0d) (3,3 61) (3,4 19) (3,5 3a) (3,6 f4) (3,7
......)
(3,8 Intel(R)) (3,9 PRO/100) (3,10 VE) (3,11 Network) (3,12 Connection)
(3,13 -)
.....
(18,4 1)
(19,0 Passerelle) (19,1 par) (19,2 défaut :) (19,3 192.168.0.2)
...

Pas très clair au premier abord, mais on voit quand même que ce qui est
intéressant (l'adresse de passerelle) se trouve en (19,3)
(19ème ligne, 3ème groupe) :

(19,3 192.168.0.2)

On pourrait donc demander à SETX de chercher le groupe (19,3),
mais cela ne serait pas universel (le n° de ligne dépend du nombre
de cartes réseau)

On va donc raisonner e relatif, par rapport à la chaine "Passerelle"
L'adresse IP est sur la même ligne que la chaine "Passerelle",
et est située à 3 groupes de distance
-> 0,3 de coordonnées relatives

3) Extraire directement dans une variable d'environnement ce groupe :
(j'ai appelé cette variable "GATEWAY")
C:WINDOWSsystem32>setx GATEWAY -f route.txt -r 0,3 "Passerelle"
-m
Extracted value is: 192.168.0.2
NB : le switch "-m" est facultatif; Il sert à placer la variable dans
le contexte machine, et non pas user :
HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment
au lieu de
HKCUEnvironment


Ca a l'air pas mal, mais question conne, comment est deffini la variable dans
une ligne de commande ?

par exemple pour moi
route add blabla mask blabla %GATEWAY


c'est bon, j'ai trouvé avec setenv et for

merci de vos aides a chacun de vous

--
Les fautes d'orthographes sus-citées sont déposées auprès de leurs
propriétaires respectifs.
Aucune responsabilité n'est engagée sur la lisibilité du message ou les
éventuels dommages qu'ils peuvent engendrer



Avatar
Channels
bonjour,



Dans un script batch, je souhaite faire cela :

route add IP1 mask 255.255.255.255 IP_PASSERELLE
route change 0.0.0.0 mask 0.0.0.0 IP1

Cependant, mon IP_PASSERELLE est dynamique,

sous batch, je suis arrivé au maximum a faire un "route print | find /i
"passerelle par""
ce qui me sort
C:>route print | find /I "passerelle par"
Passerelle par défaut : 192.168.0.1

C:>

maintenant, je souhaite enlevé tout ce qui est avant le :, c'est a dire
recuperé que l'adresse IP, pour ensuite pouvoir faire un set et pouvoir
mettre cette variable dans ma ligne de commmande route add.

avec bash sous linux, la commande serais tail ou awk, cependant, cela
n'existe pas sous windows, auriez vous une idée de comment set cette variable
pour pouvoir faire cette route.

merci


Voici ce que donne mon script au final :

@echo off
%SystemRoot%system32route.exe print> C:route.txt
setx gw -f C:route.txt -r 0,3 "Passerelle"
setenv -u gw > C:route.txt
for /f %%p IN (C:route.txt) DO set gw=%%p
%SystemRoot%system32route.exe ADD x.x.x.x MASK 255.255.255.255 %gw%
%SystemRoot%system32route.exe CHANGE 0.0.0.0 MASK 0.0.0.0 192.168.1.1
set gw setenv -u gw -delete
del C:route.txt


Encore merci a vous deux pour l'aide

--
Les fautes d'orthographes sus-citées sont déposées auprès de leurs
propriétaires respectifs.
Aucune responsabilité n'est engagée sur la lisibilité du message ou les
éventuels dommages qu'ils peuvent engendrer