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
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.
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.
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
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.
@ vava740
J'ai déjà modifié mon Bash dans le lien pastbin si tu veux voir
Mais je ne l'ai pas encore testé.
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