Changer IP en bash

Résolu/Fermé
wii!! Messages postés 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016 - 3 juil. 2015 à 14:21
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 6 juil. 2015 à 18:10
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

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 23 Date d'inscription mardi 9 juin 2015 Statut Membre Dernière intervention 10 juillet 2015 2
Modifié par Abdul-Bari le 3/07/2015 à 15:39
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 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016 20
Modifié par wii!! le 3/07/2015 à 16:12
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
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 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016 20
3 juil. 2015 à 16:44
Et comment se passe le retour à 1 ?
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934 > wii!! Messages postés 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016
6 juil. 2015 à 18:10
$step=1; while true ; do 
                  echo $step; 
                  # do whatever you want                  
                  step=$(( ($step+1) % 30))
done
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
3 juil. 2015 à 16:45
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 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016 20
3 juil. 2015 à 16:55
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 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > wii!! Messages postés 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016
3 juil. 2015 à 16:58
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 23 Date d'inscription mardi 9 juin 2015 Statut Membre Dernière intervention 10 juillet 2015 2
Modifié par Abdul-Bari le 3/07/2015 à 17:28
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 186 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 26 août 2016 20
3 juil. 2015 à 17:40
Ca marche parfaitement !

Merci à vous :)
0
Abdul-Bari Messages postés 23 Date d'inscription mardi 9 juin 2015 Statut Membre Dernière intervention 10 juillet 2015 2
4 juil. 2015 à 00:10
Nickel.

Au plaisir l'ami.
0