Changer IP en bash

Résolu
Bonjour, je possède un serveur qui doit changer d'IP toutes les 30mn selon une plage IP allant de 192.168.0.1 à 192.168.0.30

Ainsi, par exemple, à 19h, le serveur a pour IP 192.168.0.1, puis à 19h30 : 192.168.0.2 et ainsi de suite. Une fois arrivé à la dernière IP de la plage, on recommence à 0.

J'ai pensé à un cron mais au niveau du script, je ne sais vraiment pas.

Merci.

7 réponses

  1. Oui ta while va faire en sorte que ton script sera toujours en service.

    du coup, si tu lances ton script comme ceci : ./script, je crois que tu ne vas pas récupérer la main. Alors pour récupérer la main tu peux le lancer comme ceci :

    ./script &

    Mais si ton shell venait à être fermé, ton script va s'arrêter.

    nohup ./script & parcontre te permet de lancer le script sans que celui-ci ne dépende de ton shell, si ton shell est fermé ton script continuera tout de même et tu récupères la main.

    Par contre sans certitude aucune, je ne suis pas sûr que le ifdown ifup soit nécessaire vue que tu attribue de façon volatile, je crois que l'adresse est tout de suite effective, mais bon c'est un détail.
    1. Contributeur
      Salut,

      #! /bin/bash
      
      i=1
      
      while :
      do
         for (( i=1; i<=30; i++ ))
         do
            ifconfig eth0 192.168.0.${i} netmask 255.255.255.0
            ifdown eth0 && ifup eth0
            [ "${i}" -ge 30 ] && ( i=1; echo "Réinitialisation compteur." )
            sleep 30m
         done
      done

      1. Bonjour, merci pour ce script.

        Concernant la tâche CRON, je dois ainsi le lancer toutes les 900 minutes (30mn*30ip)

        Est-ce bien ca ?
      2. Contributeur
        @wii!!Non, tu lances juste le script, en fait c'est une boucle infinie (
        while :
        ).
    2. Bonjour, merci pour vos réponses

      C'est un client qui me demande ça, pourquoi je ne sais pas (le client est roi) et comme je suis plus Powershell que bash, je ne vois vraiment pas comment faire.

      Donc en gros (la syntaxe est sûrement incorrecte), je fais un :

      for ( $i=1; $i<=30; $i++ )
      
         do
             
             ifconfig eth0 192.168.0.$i netmask 255.255.255.0
              
             ifconfig etho down (puis up)
      
      done
      


      Si je mets en place ce code, la carte réseau va prendre toutes les IP instantanément lors du lancement du script.

      Comment dire : "La première fois que tu es lancé, tu prends la .1, la seconde fois tu prends la .2 etc.."

      Merci.
      1. exact,
        c'est pour ca qu'il faut utiliser la commande sleep qui permet de marquer un temps de pause, dans ton cas
        sleep 30m
        (a vérifier la syntaxe)
      2. Et comment se passe le retour à 1 ?
      3. Modérateur
        @wii!!
        $step=1; while true ; do 
                          echo $step; 
                          # do whatever you want                  
                          step=$(( ($step+1) % 30))
        done
    3. Salut,

      C'est vrai que je ne vois pas le but de ta démarche, mais après tout, je n'ai rien à te dire !

      J'aurais fait comme eltoto pour le script, et puis peut être une boucle while qui englobe la for pour un retour à 1.

      Bonne chance
      1. Bonjour,

        rien a voir avec la question mais dans quel cadre tu es amené à faire ca ?

        pour le script je pense pas que ce soit la meilleure méthode mais :
        fais une boucle de 1 à 30
        ifconfig eth0 <@ip(3 octets)>.$i netmask <masque> up
        tu fais un temps d'arret avec la commande sleep

        après si tu veux relancer le processus, rien ne t'empeche de faire une boucle en plus