Partage
  • Partager sur Facebook
  • Partager sur Twitter

[BATCH] Récupérer la passerelle réseau

Sujet résolu
    23 août 2016 à 22:56:52

    Bonsoir,

    Je viens vous demander de l'aide car déjà je débute avec batch et je ne trouve pas de réponse à mon problème sur internet.

    Donc ce que je souhaite réaliser c'est un script batch qui me permettra de changer automatiquement ma passerelle réseau (car j'ai deux modems chez moi), pour cela il faudrait que je réussisse à stocker dans une variable la passerelle actuelle, sauf que je ne trouve pas de commande directe sur internet ou même en essayant avec les aides de l'invite de commande pour ipconfig et netsh. A l'heure actuelle je sais modifier les paramètres mais pas les récupérer. Hormis le ipconfig qui affiche toutes les informations dont la passerelle je n'ai rien trouvé et je ne sais pas comment filtrer le reste des informations...

    Merci d'avance pour votre aide !

    Cordialement, L0ucas

    -
    Edité par L0ucas 24 août 2016 à 7:24:43

    • Partager sur Facebook
    • Partager sur Twitter
      25 août 2016 à 18:13:30

      Bonjour,

      Voici un exemple : (A  adapter en fonction de ton OS et de ta conf' réseaux)

      @echo off
      setlocal EnableDelayedExpansion
      mode con COLS=90 LINES=30
      
      for /F "tokens=15-18 delims=:.(" %%a in ('ipconfig /all^|find "Adresse IPv4"') do (set ip=%%a.%%b.%%c.%%d)
      for /F "tokens=11-14 delims=:." %%e in ('ipconfig /all^|find "Masque de sous-r‚seau"') do (set mask=%%e.%%f.%%g.%%h)
      for /F "tokens=11-14 delims=:." %%i in ('ipconfig /all^|find "Passerelle par d‚faut"') do (set gateway=%%i.%%j.%%k.%%l)
      for /F "tokens=15-18 delims=:." %%m in ('ipconfig /all^|find "Serveurs DNS"') do (set dnsp=%%m.%%n.%%o.%%p)
      for /F %%q in ('ipconfig /all^|findstr /N "Serveurs"') do (set dnssnumber=%%q)
      for /F %%r in ('ipconfig /all^|more +%dnssnumber:~0,-1%') do (
      set /a count=!count! + 1
      set dnssline!count!=%%r
      )
      echo.
      echo IP:!ip!
      echo Masque:!mask!
      echo Passerelle:!gateway!
      echo DNS Primaire:!dnsp!
      echo DNS Secondaire: !dnssline1!
      echo.
      pause >nul | echo Appuyer sur Entr‚e pour quitter le script.



      -
      Edité par Zaibai 25 août 2016 à 18:14:35

      • Partager sur Facebook
      • Partager sur Twitter
        26 août 2016 à 9:24:45

        Bonjour, 

        Merci pour votre aide :)

        Par contre pour le code que vous m'avez donné tous fonctionne sauf la passerelle :

        Donc je ne sais pas trop pourquoi seul la passerelle ne veut pas fonctionner, vous m'aviez de configurer par rapport à mon OS et ma configuration réseau mais je ne voyais rien à changer... alors pour compléter ma demande initiale je tourne sous windows 10 (version à jour), et puis voici une capture d'un ipconfig si ça peut aider :

        Enfin si vous avez le temps vous pourriez m'expliquer le fonctionnement des boucles for ? Enfin surtout dans les grandes lignes comme la fonction des tokens en début et comment obtenir l'information en fin de ligne suite à une recherche par find.

        Merci encore !

        Ps : j'avais aussi oublié de vous demander comment on fait pour pouvoir mettre des caractères accentués 

        -
        Edité par L0ucas 26 août 2016 à 9:26:01

        • Partager sur Facebook
        • Partager sur Twitter
          26 août 2016 à 16:01:49

          Bonjour,

          Le résultat de la passerelle ne fonctionne pas car tu as deux lignes "Passerelle par d‚faut". (la dernière=> Passerelle par défaut. . . . . . . . . : ::)

          Donc la valeur de la variable gateway à la première ligne est : 192.168.0.254 puis à la seconde ligne la valeur de la variable est "écrasé" par une valeur nulle (d'où le ...).

           Pour palier à ça, on peut crée une variable pour chaque ligne et n'afficher que la première :

          @echo off
          setlocal EnableDelayedExpansion
          for /F "tokens=11-14 delims=:." %%i in ('ipconfig /all^|find "Passerelle par d‚faut"') do (
          set /a countg=!countg! + 1
          set gateway!countg!=%%i.%%j.%%k.%%l
          )
          echo Passerelle:!gateway1!
          pause


          Je vais essayer d'expliquer le fonctionnement mais ce n'est pas mon point fort. (haha très drôle ce jeu de mot :p)

          Le for /f nous permet d'extraire des donnés de différent type : fichier;chaîne de caractère;commandes. (dans notre cas d'une commande).

          Les options (tokens;delims;etc) nous sert à récupéré exactement l'informations voulu.

          Dans notre cas "tokens=11-14 delims=:.", on récupère les informations du 11 au 14 "tokens/jetons". Si tu compte les delims (: et .), tu te rend compte que le 11 ième est le début de l’adresse IP (192) et le 14 ième la fin (254).

          Ces options interviennent seulement après l’exécution de la commande, dans notre cas : ipconfig /all^|find "Passerelle par d‚faut"

          Cette commande fait un ipconfig /all "fusionné" avec un find pour afficher seulement les lignes qui correspondent à notre recherche. (dans notre cas "Passerelle par d‚faut")

          Concernant les accents, c'est un "problème" d'encodage.
          Il suffit d'enregistré le fichier dans le bon encodage : http://www.commentcamarche.net/forum/affich-1863675-inserer-des-accents-dans-un-batch

          J'espère avoir été assez clair :ange:


          -
          Edité par Zaibai 26 août 2016 à 16:08:26

          • Partager sur Facebook
          • Partager sur Twitter
            26 août 2016 à 22:21:40

            Ah oui je n'avais pas vu qu'il y avait une deuxième passerelle par défaut chez moi :-°.

            Puis je ne ferais pas de commentaire sur :: le jeu de mot :lol:

            Et merci beaucoup pour m'avoir aidé et puis vos explications étaient assez claire pour moi ;)

            -
            Edité par L0ucas 26 août 2016 à 23:30:35

            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2016 à 9:36:23

              for /f "tokens=2,3 delims={,}" %%a in ('"WMIC NICConfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do echo IPv4 %%~a IPV6 %%~b
              • Partager sur Facebook
              • Partager sur Twitter

              [BATCH] Récupérer la passerelle réseau

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown