Scollegare in automatico una connessione PPP inattiva

Da Blah Hacklab, GNU/Linux e software libero - Megliadino San Fidenzio (Padova).

Questo programma scollega la connessione PPP in automatico dopo un certo periodo di inattività. Non solo, di solito una connessione internet ha del traffico occasionale di certi programmi che accedono alla rete anche se non li si usa. Questo script quindi monitora il traffico di rete e controlla se rimane sopra una certa soglia di traffico. Se non si verifica la condizione scollega la linea

Per installare lo script create il file di testo /usr/local/bin/inactive.py e assegnarli i permessi di esecuzione con chmod +x /usr/local/bin/inactive.py

Può essere utile aggiungere la chiamata al programma sul file /etc/ppp/ip-up, in modo che pppd lo esegua ogni volta che ci si collega. Basta aggiungere quanto segue alla fine del file:

/usr/local/bin/inactive.py &

Per info contattare aldox86 (chiocciola) gmail (punto) com

#! /usr/bin/env python
#by ovenpasta - public domain

import os,re
from datetime import datetime
from time import sleep

sent_p=0
recv_p=0
time_p=datetime.now()
elapsed=0
timeout= 30*60  #secondi
max=50*1024 #soglia (bytes)

res=10
history=[0 for i in range(0,res)]

def gettraf():
 p=os.popen("/usr/sbin/pppstats 2>&1").readlines()[1].strip()
 
 r=re.compile("(\d+)\s*(\d+\s*){4}\s*[|]\s*(\d+).*")
 m=r.match(p)
 
 sent=int(m.group(3))
 recv=int(m.group(1))
 
 return sent+recv

i=0
traf_ini=gettraf()
round=False
traf=0

while 1:
 traf_p=gettraf()
 j=i
 i+=1
 if i>=res:
  i=0
  round=True
 
 history[i]=traf_p-traf-traf_ini
 
 traf=0
 for b in history:
  traf+=b
 
 print "Traffic timeout: traffic within %d seconds: %d bytes"%(timeout,traf)

 if traf<max and round:
  print "Traffic timeout: Less than %d bytes in %d seconds"%(max,timeout)
  print "killing pppd..."
  os.system("pkill pppd")
  exit()

 sleep (timeout/res)