J'ai une connection ADSL par FT+wanadoo et je fais un ping toutes les
minutes sur mon partenaire ppp pour voir si la connection existe encore.
J'ai écrit un script python qui fait cela, si cela t'insteresse. Je le
lance dans le repertoire ip-up.
Par contre je ne sais pas si c'est mon script qui reconnecte ou si c'est
l'option "persist" de pppd mais en tous cas ca marcher (4 mois non stop)
islay:/etc/ppp/ip-up.d# cat testconnect
#!/bin/sh
if [ `ps aux |grep -c testconnection.py` -eq `expr 1` ];
then /usr/local/bin/testconnection.py &
fi
islay:/etc/ppp/ip-up.d# cat testconnect
#!/bin/sh
if [ `ps aux |grep -c testconnection.py` -eq `expr 1` ];
then /usr/local/bin/testconnection.py &
fi
islay:/etc/ppp/ip-up.d# cat /usr/local/bin/testconnection.py
#!/usr/bin/python
import sys,os,time
from pingavg import *
adresse=ipfai()
while 1:
time.sleep(120)
# print "boucle principale"
if alive(adresse)==0:
# print "redemarage"
os.system("/id/adsl restart >/dev/null 2>/dev/null")
time.sleep(60)
adresse=ipfai()
if alive("islay.dyndns.org")==0:
os.system("/etc/ppp/ip-up.d/ipcheck >/dev/null 2>/dev/null")
islay:/etc/ppp/ip-up.d# cat /usr/local/bin/pingavg.py
#!/usr/bin/python
#Script qui donne la valeur moyenne et maximale des ping sur le FAI
# sert à nourir mrtg
import os,sys,string
def ipfai():
chaine="138.231.136.6"
f=os.popen('/sbin/ifconfig ppp0','r')
for ligne in f.readlines():
if len(ligne)>40:
mots=string.split(ligne)
if len(mots)>3:
if string.find(mots[0],'inet')==0:
chaine=mots[2][6:]
return chaine
def alive(hote):
ok=0
f=os.popen('fping -A '+hote,'r')
for ligne in f.readlines():
if len(ligne)>10:
mot=string.split(ligne)[2]
if string.find(mot,'alive')==0: ok=1
return ok
def pingavge(hote):
temps=[]
f=os.popen('ping -c 10 -n '+hote,'r')
for ligne in f.readlines():
if len(ligne)>50 and string.find(ligne,'64 bytes from')>=0:
mots=string.split(ligne)
if
string.find(mots[6],'time=')==0:temps.append(string.atof(mots[6][5:]))
tot=0
for i in temps: tot=i+tot
avge=tot/len(temps)
maxi=max(temps)
return avge,maxi
if __name__=="__main__":
adresse=ipfai()
# print adresse
if alive(adresse)==1 :
avge,maxi=pingavge(adresse)
print "%s\n%s\n\nping" % (str(int(avge)),str(int(maxi)))
else :
print "0\n0\n\nping"
Voila : hope it helps.
--
Jérôme __ __
/ _) (_ \
_.----._/ / Dinosaurus \ \_.----._
/ / \ \
__/ ( | ( | Psykorigidus | ) | ) \__
/__.-'|_|--|_| |_|--|_|`-.__\