Premessa:
In questa pagina è possibile trovare alcuni script che utilizzo per la gestione delle
connessioni, e per creare delle semplici statistiche delle stesse. Ovviamente non hanno la
pretesa di essere adatti a tutti, ognuno dovrà quindi necessariamente personalizzarli.
Infine, non essendo il sottoscritto un programmatore, ogni script qui presente può essere
sicuramente migliorato ;-P
Prima di tutto ci si deve assicurare che i
programmi utilizzati per connettersi abbiano attivo il bit SUID, cioè possono essere utilizzati da qualsiasi utente. Questo si può fare con i
seguenti comandi, dati da root:
# chmod a+s /usr/sbin/chat
# chmod a+s /usr/sbin/pppd
Per comodità, sul mio pc ho ua directory /prog che
contiene tutti i miei script.
Dentro /prog ho creato /prog/ppp che contiene i dati relative
alle connessioni. Qui ci sono dei file chiamati con i nomi dei provider che uso (libero, tin, wind). Tutti questi file sono
eseguibili (chmod 775) e hanno questo formato:
#!/bin/bash /usr/sbin/pppd connect '/usr/sbin/chat -v \ "" ATx3m0DT01123456789 CONNECT \ "" ' user USER_NAME -d -detach &
01123456789 è il numero di telefono da chiamare USER_NAME
è l'user name usato per quel provider
In /etc/ppp ho 3 file chiamati
resolv.conf.wind, resolv.conf.libero, resolv.conf.tin con i DNS dei 3 provider. Eccoli:
###/etc/ppp/resolv.conf.libero nameserver 193.70.192.25 nameserver 193.70.152.25
###/etc/ppp/resolv.conf.wind nameserver 212.141.53.123 nameserver 212.245.255.2
###/etc/ppp/resolv.conf.tin nameserver 212.216.112.222 nameserver 212.216.172.162
Sempre in /etc/ppp ci sono alcuni file
standard:
###/etc/ppp/options /dev/modem 57600 debug lock crtscts defaultroute mtu 552 mru 552
###/etc/ppp/pap-secrets user_libero ppp0
pass_libero user_tin ppp0 pass_tin user_wind ppp0 pass_wind
Dato che per inviare la posta utilizzo postfix, in
/etc/postfix si sono tre file: main.cf.libero, main.cf.tin, main.cf.wind, tutti uguali, tranna che per:
relayhost = [mail.provider.it]
In tal modo, quando voglio utilizzare un altro provider,
la posta viene inviata col server giusto.
Lo script per cambiare provider è il seguente:
###/prog/cambia #!/bin/bash if [ $# = 0 ] then echo Manca un parametro exit fi if [ -f /etc/ppp/resolv.conf.$1 ] then rm -f /etc/ppp/resolv.conf cp /etc/ppp/resolv.conf.$1
/etc/ppp/resolv.conf rm -f /etc/postfix/main.cf cp /etc/postfix/main.cf.$1
/etc/postfix/main.cf /usr/sbin/postfix reload echo $1 > /prog/ppp/current rm -f /prog/ppp/current1 cp /prog/ppp/$1 /prog/ppp/current1 chown hf.hf /prog/ppp/current* else echo Il provider $1 non esiste fi
Dopo aver reso questo script eseguibile con un chmod 775
/prog/cambia, per utilizzare un diverso provider sarà sufficiente
lanciare (da root, altrimenti /usr/sbin/postfix reload non funziona) "cambia libero", oppure "cambia tin" oppure ancora "cambia wind".
Lo script crea in /prog/ppp i file:
- current (con dentro il nome del provider attivo)
- current1 (esegubile che effettua la connessione)
Per verificare quindi che provider è in uso sarà
sufficiente questo piccolo scirpt:
###/prog/checkisp #!/bin/bash echo echo PROVIDER: `cat /prog/ppp/current` echo
Per connettersi sarà sufficiente creare un file chiamato
ISP come questo:
###/prog/isp #!/bin/bash echo echo PROVIDER: `cat /prog/ppp/current` /prog/ppp/current > /dev/null /prog/online &
Online è un altro piccolo script che verifica quando la
connessione è avvenuta lanciando continuamente ifconfig.
###/prog/online #!/usr/bin/perl while (1) { @a=`ifconfig`; foreach $line (@a) { if ($line =~ /ppp/) { $found++; last; } } if ($found == 1) { print "\nStato: ON-LINE\n"; last; } sleep(1); } open (FILE,"> /prog/ppp/time"); $time=time; print FILE "$time"; close FILE;
ifconfig è però un programma che può usare solo
l'utente root, sarà quindi necessario dare il comando:
ln -s /sbin/ifconfig /usr/local/bin/ifconfig
Lo script qui sopra verifica quando si è online e salva in
un file chiamato /prog/ppp/time l'ora dell'inizio della connessione.
Lo script sottostante, da come output i minuti di
connessione:
###/prog/timeisp #!/usr/bin/perl open(FILE,"/prog/ppp/time") || die "Non si è ancora connessi"; @file = <FILE>; close FILE; chomp $file[0]; $time=time-$file[0]; $time=int($time/60); print "\nDURATA CONNESSIONE: $time minuti\n\n";
Per scollegarsi ecco un altro script:
###/prog/scollega #!/bin/bash if [ -f /var/run/ppp0.pid ] then kill `cat /var/run/ppp0.pid` else echo Non si è ancora connessi fi timeisp rm -f /prog/ppp/time makelog cat /dev/null > /var/log/daemon
Questo script, oltre a chiudere la connessione, cancella
il file /prog/ppp/time che non serve più, visualizza la durata della connessione e lancia un altro script, makelog.
###/prog/makelog #!/usr/bin/perl open (LOG,"< /var/log/daemon") || die "Impossibile aprire il file:
$!"; @log = <LOG>; close LOG; foreach $line (@log) { chomp $line; $line =~ s/ / /g; @line = split (/\s/,$line); if ($line[4] =~ /^pppd/i) { $time = sprintf("%5s",$line[7])
if ($line[5] eq 'Connect'&& $line[7] ne 'failed'); if ($line[5] eq 'Sent') {
$sent = sprintf("%5s",mega($line[6]));
$recv = sprintf("%5s",mega($line[9]));
$line[1] = sprintf("%2s",$line[1]);
$level = &ora;
$tariffa = "-!-" if ($level == 1);
$tariffa = "- -" if ($level == 2);
$costo = sprintf("%5d",100+($time*20)) if ($level == 1);
$costo = sprintf("%5d",120+($time*17)) if ($level == 2);
print "$line[1] $line[0] $line[2] [$tariffa] | $time min | $sent Mb | $recv Mb
| $costo lire\n";
$time = '';
$sent = '';
$recv = '';
} } }
sub mega { local ($byte) = @_; $mega = $byte/(1024*1000); $mega = sprintf("%.1f",$mega); return $mega; }
sub ora { $_ORA=`date +%H-%M-%a`; chomp $_ORA; ($ORA,$MIN,$GIO) = split(/-/,$_ORA); return 2 if ($GIO eq 'sab' || $GIO eq
'dom'); return 1 if ($ORA > 8 && $ORA
< 18); if ($ORA == 18) {
return 1 if ($MIN <= 30);
return 2 if ($MIN > 30); } return 2; }
Questo script agisce sul file /var/log/daemon, dove
vengono salvati tutti i dati relativi ai demoni.
Per fare ciò si deve modificare il file /etc/syslog.conf
aggiungendo la riga:
daemon.* /var/log/daemon e
dando i permessi al file: chmod 666 /var/log/daemon
Makelog crea in /prog/ppp un file chiamato
"bolletta" nel quale salva le seguenti opzioni:
- Giorno e ora dell'inizio della connessione
- Durata della connessione
- Megabyte inviati
- Megabyte ricevuti
- Costo della telefonata
Per impostare i costi modificare la parte eviednziata in
rosso specificando costo al minuto e scatto alla risposta, in lire a seconda delle fasce
orarie (la prima intera, la seconda ridotta).
Lo script tiene conto anche dell'ora della chiamata,
applicando quindi la tariffa intera o ridotta.
Un altro script, /prog/totale, darà come output il file
/prog/ppp/bolletta e anche il costo totale di tutte le chiamate:
###/prog/scollega #!/usr/bin/perl open (FILE,"/prog/ppp/bolletta"); @file = <FILE>; close FILE; foreach $line (@file) { print "$line"; chomp $line; @a = split (/ /,$line); $totale += $a[$#a-1]; } $totale = converti($totale); print "\n+ TOTALE: $totale lire\n\n";
sub converti { local ($numero) = @_; $numero = reverse $numero; $numero =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g; return scalar reverse $numero; }
INDIETRO
|