Sorry za 3 posty... Poprzednie mozna skaowac, jak to komus
przeszkadza...
Zwatpilem nieco w swe sily, gdyz nie znam perla, ale jakos metoda
dedukcji udalo mi sie zmodyfikowac ten skrypt i mamy ladne
zliczanie ruchu routera
Wyglada to np tak:
http://groch.dyndns.org/stats.php
(tabelka "Miesięczny transfer (..)")
Mozna oczywiscie sobie zmodyfikowac plik php, aby transfer routera
byl wyswietlany osobno.
Nalezy zmodyfikowac 2 pliki - plik, za pomoca ktorego dodajemy
regulki dla statystyk i plik stat.pl znajdujacy sie w glownym katalogu
skryptu statystyk.
Tak oto wyglada zmodyfikowany plik regulek:
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
reguly(){
stat_busy "Dodaje reguły"
SIEC=192.168.0. #wstaw 3 pierwsze oktety adresu LAN, np. 192.168.0.
NR=4 #wstaw ostatni oktet pierwszego IP w sieci, np. jesli pierwszym IP jest 192.168.0.4 to wstaw 4
IP=8 #wstaw ostatni oktet ostatniego IP w sieci, np. jesli ostatnim IP jest 192.168.0.8 to wstaw 8
SIEC_MASKA=192.168.0.0/24 #wstaw adres sieci wraz z maska, np. 192.168.0.0/24
iptables -t mangle -D FORWARD -i $INTIF1 -j STAT >/dev/null 2>&1
iptables -t mangle -D FORWARD -o $INTIF1 -j STAT >/dev/null 2>&1
iptables -t mangle -D INPUT -i $EXTIF -j LOCAL_STAT >/dev/null 2>&1
iptables -t mangle -D OUTPUT -o $EXTIF -j LOCAL_STAT >/dev/null 2>&1
iptables -t mangle -F STAT >/dev/null 2>&1
iptables -t mangle -X STAT >/dev/null 2>&1
iptables -t mangle -N STAT
iptables -t mangle -F LOCAL_STAT >/dev/null 2>&1
iptables -t mangle -X LOCAL_STAT >/dev/null 2>&1
iptables -t mangle -N LOCAL_STAT
iptables -t mangle -I FORWARD -o $INTIF1 -j STAT
iptables -t mangle -I FORWARD -i $INTIF1 -j STAT
iptables -t mangle -I INPUT -i $EXTIF -j LOCAL_STAT
iptables -t mangle -I OUTPUT -o $EXTIF -j LOCAL_STAT
#dla routera
iptables -t mangle -I LOCAL_STAT -i $EXTIF -d ! $SIEC_MASKA -j RETURN
iptables -t mangle -I LOCAL_STAT -o $EXTIF -s ! $SIEC_MASKA -j RETURN
while [ $NR -le $IP ]; do
#dla poszczególnych kompów
iptables -t mangle -A STAT -d $SIEC$NR -j RETURN
iptables -t mangle -A STAT -s $SIEC$NR -j RETURN
NR=$[NR + 1]
done
stat_done
}
czysc(){
stat_busy "Czyszczenie reguł"
iptables -t mangle -D FORWARD -i $INTIF1 -j STAT
iptables -t mangle -D FORWARD -o $INTIF1 -j STAT
iptables -t mangle -D INPUT -i $EXTIF -j LOCAL_STAT
iptables -t mangle -D OUTPUT -o $EXTIF -j LOCAL_STAT
iptables -t mangle -F STAT
iptables -t mangle -X STAT
iptables -t mangle -F LOCAL_STAT
iptables -t mangle -X LOCAL_STAT
stat_done
}
case $1 in
reguly)
reguly
;;
czysc)
czysc
;;
*)
echo "
Uzyj:
reguly - dodawanie regul do iptables
czysc - wylaczenie wszystkich statystyk i czysci iptables
"
;;
esac
Skrypt ten sam sie troszczy o poprawnosc regulek dla statystyk - nalezy
tylko wyedytowac pare informacji dotyczacych Twojej sieci.
Odpalamy komenda 'nazwa_pliku' reguly
Czyscimy iptables z regulek 'nazwa_pliku' czysc
Nastepny plik jaki musimy zmodyfikowac to oczywscie stat.pl
Dodajemy do pliku takie oto cos:
@router_info = `$ipt -t mangle -L LOCAL_STAT -vxZ`;
foreach my $line (@router_info)
{
chomp($line);
$host = "router";
if($line =~ /^ +([0-9]+) +([0-9]+).*any +anywhere +(.*)/ )
{
$line =~ s/^ +([0-9]+) +([0-9]+).*any +anywhere +(.*)/$1 $2 $3/g;
($pkts, $bytes) = split ' ',$line;
$download{$host} = $bytes;
}
elsif($line =~ /^ +([0-9]+) +([0-9]+).*any +(.*) +anywhere +/ )
{
$line =~ s/^ +([0-9]+) +([0-9]+).*any +(.*) +anywhere +/$1 $2 $3/g;
($pkts, $bytes) = split ' ',$line;
$upload{$host} = $bytes;
}
if($download{$host} || $upload{$host})
{
$activity{$host} = $now;
}
}
Najlepiej to umiescic miedzy liniami:
if($download{$host} || $upload{$host})
{
$activity{$host} = $now;
}
}
}
i
# Odczytanie danych z poprzedniego wykonania skryptu
if( open(LOGFILE, $file) )
Mam nadzieje tasior666, ze spelnilem Twoje oczekiwania
Moze sie przydac kazdemu kto ma limity transferu...
Pozdrawiam