Re: Problèmes à la reconnexion de pppd

Top Page

Reply to this message
Author: Jérôme KIEFFER
Date:  
To: guilde
Subject: Re: Problèmes à la reconnexion de pppd
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    |  ) |  ) \__
/__.-'|_|--|_|                    |_|--|_|`-.__\