Changer IP en bash

Résolu
wii!! Messages postés 195 Statut Membre -  
jisisv Messages postés 3678 Statut Modérateur -
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

eltotomaske
 
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
0
Abdul-Bari Messages postés 24 Statut Membre 2
 
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
0
wii!! Messages postés 195 Statut Membre 20
 
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.
0
eltotomaske
 
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)
0
wii!! Messages postés 195 Statut Membre 20
 
Et comment se passe le retour à 1 ?
0
jisisv Messages postés 3678 Statut Modérateur 934 > wii!! Messages postés 195 Statut Membre
 
$step=1; while true ; do 
                  echo $step; 
                  # do whatever you want                  
                  step=$(( ($step+1) % 30))
done
0
zipe31 Messages postés 38797 Statut Contributeur 6 433
 
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

0
wii!! Messages postés 195 Statut Membre 20
 
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 ?
0
zipe31 Messages postés 38797 Statut Contributeur 6 433 > wii!! Messages postés 195 Statut Membre
 
Non, tu lances juste le script, en fait c'est une boucle infinie (
while :
).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Abdul-Bari Messages postés 24 Statut Membre 2
 
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.
0
wii!! Messages postés 195 Statut Membre 20
 
Ca marche parfaitement !

Merci à vous :)
0
Abdul-Bari Messages postés 24 Statut Membre 2
 
Nickel.

Au plaisir l'ami.
0