Freesco, NND, CDN, EOS
http://forum.freesco.pl/

ACCOUNT - skrypt obsługi liczników
http://forum.freesco.pl/viewtopic.php?f=24&t=11177
Strona 1 z 2

Autor:  jamp [ czwartek, 9 lutego 2006, 16:00 ]
Tytuł:  ACCOUNT - skrypt obsługi liczników

Poniżej wstawiłem kod skryptu obsługi liczników account.
UWAGA jest to wersja testowa
kernel musi być z zaimplementowaną obsługą liczników account

: [/] [] ()
#! /bin/sh
# ---------------------------------------------------------------------------
#
#                       Skrypt obsługi liczników account
#            rcaccount Piotr "JamP" Jamrozik <jamp(at)jamp.int.pl>
#
# !!! UWAGA !!!
# wersja testowa 001
# ---------------------------------------------------------------------------
#
# Skrypt należy umie&para;cić w katalogu /etc/rc.d/ i dopisać w sekcji DAEMONS
# w pliku /etc/rc.conf bezpo&para;rednio po iptables
#
# W trakcie startu systemu odbudowywany stan istniej&plusmn;cych w kopii liczników
# Podczas zatrzymywania systemu wykonywane jest zapisanie obecnego stanu
# liczników do kopii ( st&plusmn;d niestandardowe użycie opcji stop - nie zatrzymuje
# liczenia tylko zapisuje liczniki )
#
# Dostępne opcje:
#
# start - uruchomienie liczników i rozpoczęcie zliczania
# stop  - zapisanie kopii liczników do pliku
# reset - kasowanie liczników i rozpoczęcie zliczania od zera
# stat  - proste statystyki
#
# ---------------------------------------------------------------------------
#
# Użyte zmienne konfiguracyjne:
#
# SIECLAN
# -------
# Do zmiennej SIECLAN wpisz swoj&plusmn; sieć lokaln&plusmn; w formacie: "192.168.1.0/24"
#                              !!! UWAGA !!!
#        maska może mieć mieć tylko jedn&plusmn; z 3 warto&para;ci: 8, 16, 24 lub
# można j&plusmn; pomin&plusmn;ć zliczaj&plusmn;c tylko 1 użytkownika wtedy podajemy "192.168.1.2"
# ---------------------------------------------------------------------------
#
# PELNE
# -----
# Zmienna PELNE=1 - pełne / PELNE=0 - skrócone (bez rozbicia na na usługi)
#
# ---------------------------------------------------------------------------
#
# GDZIE
# -----
# Zmienna GDZIE zawiera &para;cieżkę do zapisywania kopii liczników
#
# ---------------------------------------------------------------------------
#
# W tej chwili skrypt obsługuje tylko 1 plik liczników
# W budowie obsługa limitowania niceshapera na podstawie liczników account
#
# ---------------------------------------------------------------------------
#
# Kopię liczników co 1 minutę można uzyskać przez dopisanie w cronie poleceniem
# crontab -e
# 0-59/1 * * * * /etc/rc.d/rcaccount stop
#
# ---------------------------------------------------------------------------
#
# Narazie skrypt nie jest optymalny ani piękny ale chyba działa bez problemów:)
# Napisałem go dzi&para; w nocy więc mog&plusmn; wyst&plusmn;pić jakie&para; nieprzewidziane trudno&para;ci
#
# Proszę o zgłaszanie uwag i potrzeb co do dalszego sposobu rozwijania skryptu:)
#
# Miłej zabawy z licznikami account :)
#
# ---------------------------------------------------------------------------

. /etc/rc.conf
. /etc/rc.d/functions

# ---------------------------------------------------------------------------
# Te 3 parametry ustaw sam :)
# ---------------------------------------------------------------------------
SIECLAN="192.168.1.0/24"
PELNE=1
GDZIE="/etc/iptables/account"
# ---------------------------------------------------------------------------
# Poniżej nie musisz nic zmieniać
# ---------------------------------------------------------------------------
case "$1" in
start)
   stat_busy "Uruchamianie liczników account"
   if [ ! -d $GDZIE ]; then
      mkdir -p $GDZIE;
   fi
   if [ ! -e /proc/net/ipt_account/mynetwork ]; then
      iptables -N statistics
         if [ "$PELNE" = "1" ]; then
            iptables -A statistics -m account --aaddr $SIECLAN --aname  mynetwork
       LINIAZERO="bytes_src = 0 0 0 0 0 packets_src = 0 0 0 0 0 bytes_dest = 0 0 0 0 0 packets_dest = 0 0 0 0 0 time = 0"
    else
       iptables -A statistics -m account --aaddr $SIECLAN --aname  mynetwork --ashort
       LINIAZERO="bytes_src = 0 packets_src = 0 bytes_dest = 0 packets_dest = 0 time = 0"
    fi
      iptables -I FORWARD -j statistics
         if [ ! -e $GDZIE/.mynetwork.zero ]; then
       stat_busy "Budowa pliku zerowania accounta"
            sleep 5
            while read line; do
               echo $line | echo "ip = `cut -f 3 -d ' '` $LINIAZERO" >> $GDZIE/.mynetwork.zero
               done < /proc/net/ipt_account/mynetwork
       stat_done
         fi
   fi
   stat_done
   stat_busy "Zapis ostatnich warto&para;ci do liczników account"
   if [ -f $GDZIE/.mynetwork.save ]; then
      while read line; do echo $line > /proc/net/ipt_account/mynetwork; done < $GDZIE/.mynetwork.save
   fi
   stat_done
   wynik
   ;;
stop)
   stat_busy "Zapis liczników account"
   if [ -f /proc/net/ipt_account/mynetwork ]; then
      cat /proc/net/ipt_account/mynetwork > $GDZIE/.mynetwork.save
   fi
   stat_done
   wynik
   ;;
reset)
   $0 stop
   stat_busy "Zerowanie licznikópw account"
   if [ -f $GDZIE/.mynetwork.zero ]; then
      while read line; do echo $line > /proc/net/ipt_account/mynetwork; done < $GDZIE/.mynetwork.zero
   fi
   stat_done
   stat_busy "Kopia liczników account"
   if [ ! -f $GDZIE/.mynetwork.kopia ]; then
      cat $GDZIE/.mynetwork.save > $GDZIE/.mynetwork.kopia
   else
      cat $GDZIE/.mynetwork.kopia > $GDZIE/.mynetwork.kopia1
      cat $GDZIE/.mynetwork.save > $GDZIE/.mynetwork.kopia
   fi
   cat $GDZIE/.mynetwork.zero > $GDZIE/.mynetwork.save
   stat_done
   wynik
   ;;
stat)
   stat_busy "Proste statystki liczników account"
echo "+-----------------+------------+------------+------------+--------------+"
echo "|    Użytkownik   |   razem    |  odebrał   |   wysłał   | nieatywny od |"
echo "+-----------------+------------+------------+------------+--------------+"
 if [ "$PELNE" = "1" ]; then
awk 'BEGIN {aaa=0}{bbb="B"}{bbb1="B"}{bbb2="B"}{ccc=$6+$20}
  {ddd=$6}{eee=$20}{zm=0}{roz="B"}{fff=$33}
     function jednostka(zm){{if(zm < 1024 ) {roz="B"}}
        {if((zm > 1024  )&&(zm < 1024^2)) {{zm/=1024}  {roz="KB"}}}
        {if((zm > 1024^2)&&(zm < 1024^3)) {{zm/=1024^2}{roz="MB"}}}
        {if(zm > 1024^3) {{zm/=1024^3} {roz="GB"}}}
        {ccc=zm}{bbb=roz}}
   {if(ccc > 0) {
   {jednostka(ccc)}{op1=ccc}{w1=bbb}
   {jednostka(ddd)}{op2=ccc}{w2=bbb}
   {jednostka(eee)}{op3=ccc}{w3=bbb}
   {cz=$34 " sek"}
   {if($34 > 31536000 ) {cz="ponad roku"}}
   {printf"| %-15s | %7.2f %-2s | %7.2f %-2s | %7.2f %-2s | %12s |\n",$3,op1,w1,op2,w2,op3,w3,cz}
   {zm=0}{roz="B"}
   }}' /proc/net/ipt_account/mynetwork
 else
awk 'BEGIN {aaa=0}{bbb="B"}{bbb1="B"}{bbb2="B"}{ccc=$6+$12}
  {ddd=$6}{eee=$12}{zm=0}{roz="B"}{fff=$33}
     function jednostka(zm){{if(zm < 1024 ) {roz="B"}}
        {if((zm > 1024  )&&(zm < 1024^2)) {{zm/=1024}  {roz="KB"}}}
        {if((zm > 1024^2)&&(zm < 1024^3)) {{zm/=1024^2}{roz="MB"}}}
        {if(zm > 1024^3) {{zm/=1024^3} {roz="GB"}}}
        {ccc=zm}{bbb=roz}}
   {if(ccc > 0) {
   {jednostka(ccc)}{op1=ccc}{w1=bbb}
   {jednostka(ddd)}{op2=ccc}{w2=bbb}
   {jednostka(eee)}{op3=ccc}{w3=bbb}
   {cz=$18 " sek"}
   {if($18 > 31536000 ) {cz="ponad roku"}}
   {printf"| %-15s | %7.2f %-2s | %7.2f %-2s | %7.2f %-2s | %12s |\n",$3,op1,w1,op2,w2,op3,w3,cz}
   {zm=0}{roz="B"}
   }}' /proc/net/ipt_account/mynetwork
 fi
 echo "+-----------------+------------+------------+------------+--------------+"
   stat_done
   wynik
   ;;
*)
echo "Użycie: rcaccount [ start | stop | reset | stat ]"
;;
esac
exit 0
Zapraszam do testów i proszę o zgłaszanie uwag :)

Dodane 10.02.2006r.
Trochę o skrypcie :)
Narazie nie zauważyłem usterek w działaniu skryptu :)

Powstał dlatego że:
- był dla mnie niezbędny :)
- obsługa account jest w kernelu (nowe wersje) i działa lepiej oraz szybciej niż inne sposoby liczenia ruchu w sieci oraz jest łatwa w zastosowaniach
- brak gotowych rozwiązań w NND na zapis, odczyt i kasowanie liczników oraz prostych statystyk

Bardzo proszę o opinię bo narazie niemam zielonego pojęcia czy jest jakiekolwiek zainteresowanie moim skryptem, a robienie czegoś czego nikt nie potrzebuje mija się z celem :)

Autor:  Liroy [ niedziela, 12 lutego 2006, 23:12 ]
Tytuł: 

a po czym poznac ze kernel ma zaimplementowaną obsługą liczników account

Autor:  jamp [ poniedziałek, 13 lutego 2006, 00:35 ]
Tytuł: 

Liroy pisze:
a po czym poznac ze kernel ma zaimplementowaną obsługą liczników account
Odpal skrypt który zbudowałem z opcją start po wstępnym ustawieniu zmiennych, i zobacz czy w /proc/net/ipt_account/ jest plik mynetwork

Autor:  marask [ poniedziałek, 13 lutego 2006, 00:54 ]
Tytuł: 

sprawdź w pliku /boot/kconfig

Autor:  Liroy [ wtorek, 14 lutego 2006, 10:47 ]
Tytuł: 

jamp wogole wlaczyc nie moge

marask czego mam tam szukac

Autor:  jamp [ wtorek, 14 lutego 2006, 11:14 ]
Tytuł: 

Liroy pisze:
jamp wogole wlaczyc nie moge marask czego mam tam szukac
Czego włączyć nie możesz ?? napisz coś bliżej bo skrypt robi to co powinien :). Czy nadałeś prawa wykonalności poleceniem chmod +x skryptowi i czy masz w jajku obsługę account oraz czy ustawiłeś poprawnie parametry w skrypcie zgodne z twoją siecią lan.
Wyślij co wstawiłeś do zmiennych i jaki masz adres sieci.

Autor:  marask [ wtorek, 14 lutego 2006, 12:09 ]
Tytuł: 

jamp skąd masz kernel z obsługą ipaccount? jakiś link czy cuś ;]

Autor:  jamp [ wtorek, 14 lutego 2006, 12:16 ]
Tytuł: 

marask pisze:
jamp skąd masz kernel z obsługą ipaccount? jakiś link czy cuś ;]
W wersji 2.4.32-6nnd napewno jest. Chyba w ...-5nnd też, ale tego nie jestem pewien.

Autor:  tasiorek [ wtorek, 14 lutego 2006, 12:23 ]
Tytuł: 

Jest w NND w kernelach wyzszych niz 2.4.31-1nnd.

Autor:  jamp [ wtorek, 14 lutego 2006, 13:26 ]
Tytuł: 

Drobny błąd powoduje odwrotne wyświetlanie ściągania z wysyłaniem :oops:
Wystarczy zmienić z
# linia 148
{ddd=$6}{eee=$20}
na
{ddd=$20}{eee=$6}
oraz
# linia 165
{ddd=$6}{eee=$12}
na
{ddd=$12}{eee=$6}
lub wystarczy jeżeli komuś odpowiada kolejność zamienić miejcami wyświetlany nagłówek ( linia 144).

Autor:  marask [ wtorek, 14 lutego 2006, 17:44 ]
Tytuł: 

skąd masz kernel 2.4.32-6nnd ?

Autor:  tasiorek [ wtorek, 14 lutego 2006, 18:05 ]
Tytuł: 

Z iso testowego.

Autor:  jamp [ wtorek, 14 lutego 2006, 19:36 ]
Tytuł: 

tasiorek pisze:
Z iso testowego.
albo z CVSu

Autor:  Liroy [ środa, 15 lutego 2006, 19:53 ]
Tytuł: 

no to kicha bo ja mam
Cytuj:
Linux router_nnd 2.4.31-1nnd #1 wto cze 7 21:48:56 BST 2005 i586 unknown unknown GNU/Linux

Autor:  marask [ środa, 15 lutego 2006, 22:41 ]
Tytuł: 

a 2.4.32-5nnd też się nada ?

Autor:  tasiorek [ czwartek, 16 lutego 2006, 00:02 ]
Tytuł: 

marask pisze:
a 2.4.32-5nnd też się nada ?

Przeczytaj jeszcze raz watek to bedziesz wiedzial.
Liroy, to sobie zainstaluj nowsze.

Autor:  Liroy [ czwartek, 16 lutego 2006, 17:42 ]
Tytuł: 

tasiorek jesli mozna to napisz jak

Autor:  tasiorek [ czwartek, 16 lutego 2006, 18:01 ]
Tytuł: 

http://ww1.devel-nnd.brb.pl/nnd/repo.test/
Tu masz repozytorium, a jak to zrobic powie Ci man pacman.

Autor:  jamp [ środa, 8 marca 2006, 12:07 ]
Tytuł: 

Widząc ilość odwiedzin :) pozwoliłem sobie wstawić ankietę, żeby zorientować się w rzeczywistej potrzebie rozwijania skryptu.

Autor:  Alfred [ środa, 8 marca 2006, 19:27 ]
Tytuł: 

Swego czasu dość intensywnie interesowałem się tym zagadnieniem.
Opracowałem nawet odpowiednie skrypty do współpracy account z bazą rrdtool i skrypty wyświetlania wyników w rrdtool.
Zainteresowanych zapraszam na www.ao.sytes.net
Tam opisałem co i jak, ale uwaga - początkujący niech sobie odpuszczą.
I jeszcze jedna uwaga - ten opis jest z października 2005.

Strona 1 z 2 Strefa czasowa UTC+2godz.
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/