CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [Bash] boucle infinie, cron ou daemon ?

DébutPage précedente
1
Page suivantePage suivante
Delurk Delurk
MP
Niveau 6
26 janvier 2015 à 22:04:16

Bonjour,

Pour commencer, le bash proposé ci-dessous c'est du fait maison sans trop de connaissances mais ça fonctionne. Soyez indulgent svp :)

Contexte:

Je dois ajouter mon ip dynamique dans la whitelist du logiciel teamspeak3 (serveur) afin de ne pas être banni par le système anti-flood lorsque j'adresse des requêtes par telnet.

Ainsi, j'aimerais écrire un truc qui ressemble à un "deamon" afin de checker tout le temps si mon adresse ip a changé et dans ce cas l'ajouter dans la whitelist.

Le script:

#!/bin/bash

path=/home/ts3
stockip=$path/resolve/stock.txt
whitelist=$path/teamspeak3/query_ip_whitelist.txt
resolve1=$path/resolve/logs/inchange.log
resolve2=$path/resolve/logs/modifie.log

while :
	do

newip=$(dig +short mon-domaine-mainson.com @resolver1.opendns.com)
oldip=$(head -n 1 $stockip)
check=$(date +%G/%m/%d-%k:%M:%S)

			if [ $newip =  $oldip ]

				then

				echo "ip inchangé -" $check >> $resolve1

					else

					echo "ip modifié -" $check >> $resolve2
					echo $newip > $stockip
					echo $newip >> $whitelist

			fi

	sleep 300
done

Si édité voir : http://pastebin.com/KQgYVUbE

Commentaires

- Pour commencer, j'ai défini des variables pour les chemins, plus pratique pour mes tests.
- Suivie de ma grande question : boucler à l'infini ou méthode Cron avec un kill process ? Oui, c'est certainement pas le plus adapté mais je ne connais pas d'autres méthodes... Pourriez vous m'éclairer svp.
- L'ajout dans la liste blanche: j'ajoute systématiquement ma nouvelle ip à la liste mais je vais essayer de trouver une méthode pour écraser l'ancienne directement.

J'espère que vous aurez un peu de temps à me consacrer. Merci :)

Pseudo supprimé
Niveau 10
27 janvier 2015 à 15:17:20

Moi je ferai un cron tous simple. Après à toi de voir de quel intervalle de temps tu as besoin du check. Sachant qu'une adresse IP dynamique change pas toutes les 5 minutes.

Un truc toutes les heures, check si l'ip à changé si oui, tu l'ajoutes à ta whitelist, ou tu remplaces. Pas de besoin de kill quoi que se soit. Tu fais pas de boucle. Pour remplacer ton ancienne IP par la nouvelle tu peux regarder du coté de sed.

Sinon tu peux pas passer par un service de DNS dynamique genre no-ip ? Et ajouter ton adresse obtenue (genre bidule.ddns.net) au lieu de l'IP ? Tu fais gérer ça par ta box (si elle a l'option) ou ddclient, et tu es tranquilles comme ça.

Knakis Knakis
MP
Niveau 10
27 janvier 2015 à 17:46:41

Regarde l'interval de temps quand ton ip change (parce que ça ne change très certainenement pas aléatoirement) et fais un cron de l'interval+1 (le temps que ça met pour changer, plus 1 minute).

#!/usr/bin/env sh

path=/home/ts3
stockip=$path/resolve/stock.txt
whitelist=$path/teamspeak3/query_ip_whitelist.txt
resolve1=$path/resolve/logs/inchange.log
resolve2=$path/resolve/logs/modifie.log

newip=$(dig +short mon-domaine-mainson.com @resolver1.opendns.com)
oldip=$(head -n 1 $stockip)
check=$(date +%G/%m/%d-%k:%M:%S)

if [ $newip =  $oldip ]; then
  echo $check >> $resolve1
else
  echo $check >> $resolve2
  echo $newip > $stockip
  echo $newip > $whitelist
fi

Note la différence entre echo $newip >> $whitelist et la version au dessus. Avec la version au dessus, tu « remplaces » (inb4 crise de nerf) le contenu de la whitelist par ton ip actuelle.

Message édité le 27 janvier 2015 à 17:48:41 par Knakis
Delurk Delurk
MP
Niveau 6
27 janvier 2015 à 22:14:46

http://pastebin.com/KQgYVUbE

J'ai réécris en suivant vos conseils mais je ne l'ai pas encore testé. En commentaire et au début du bash, vous trouverez mon cycle cron.

@ XshI0u
J'ai besoin de résoudre le domaine car la whitelist n'accepte que les ip.

@ Knakis
Ton intervalle me semble la plus appropriée pour éviter l'interruption de service. Je vais voir ça lorsque je vais lancer mon cron. Par ailleurs, je ne dois pas écraser toute la whitelist sinon je perds le reste des ip déjà présentes :)

vava740 vava740
MP
Niveau 10
28 janvier 2015 à 09:44:05

Pour remplacer l'ancienne IP par la nouvelle IP dans la whitelist (plutôt que d'ajouter) :

sed -i 's/ancienne.ip/nouvelle.ip/' whitelist

Mais ça implique que tu gardes une trace de l'ancienne IP quelque part.

Delurk Delurk
MP
Niveau 6
28 janvier 2015 à 12:56:13

@ vava740

J'ai déjà modifié mon Bash dans le lien pastbin si tu veux voir :)
Mais je ne l'ai pas encore testé.

Delurk Delurk
MP
Niveau 6
28 janvier 2015 à 22:29:52

Le Bash fonctionne en partie, seul le

echo $newip >> $whitelist

me pose un problème car il inscrit l'ip sans retour à la ligne mais accolé à la dernière ip de la liste.

exemple :

8.8.8.8
8.8.4.4
192.168.1.1127.0.0.1
Message édité le 28 janvier 2015 à 22:30:18 par Delurk
DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment