Учет и мониторинг GPRS трафика
Подключаемся к интернету с помощьи pon, и незнаем как ввести учет трафика (болезнь ГПРСовщиков :)) ? Не помогает всякие knemo, ulog и т.п.? Неожиданное отключение электроэнергии и бах! Вышеупомнятуе тулзы не в силах сохранить учет трафика за текущую сессию.
И так, напишем два скрипта. Один для учета и второй для мониторинга трафика.
Первый скрипт, назвал trafbil, будет так выглядеть:
#!/bin/sh # by banda 2009 $Id: trafbil, v 0.2 2009-03-22 # Скрипт учета трафика на ppp0 с защитой от перезаписи и сбоев питания T=`eval date +%Y` T0=`eval date +%m` T2=`eval date +%H%M%S` DIR=~/.trafbil/log/$T/$T0/`eval date +%d` mv $DIR/ppp.out $DIR/$T2.out 2> /dev/null mv $DIR/ppp.in $DIR/$T2.in 2> /dev/null # главный цикл, на каждой 8-й секунде фиксировать трафик от ррр0 while :; do # FLAG у меня не работал. Может он у вас работает. Он служит для единой # копии запуска скрипт #FLAG=~/$(basename $0); if [ -e $FLAG ]; then echo уже запущено 1>&2; exit 1; fi TMPVALUE=`/sbin/ifconfig | awk '/^ppp0 /{print $1}' ` # проверяем, запущен ли ррр0 if [ "" = "$TMPVALUE" ] then mv $DIR/ppp.out $DIR/$T2.out 2> /dev/null mv $DIR/ppp.in $DIR/$T2.in 2> /dev/null else # если pppd запущен, ведем учет # Лог файлы создаются по годам, месяцам, дням и по сессиям. Все записи # будут находится в директории пользователя - .trafbil/log T=`eval date +%Y` T0=`eval date +%m` T2=`eval date +%H%M%S` DIR=~/.trafbil/log/$T/$T0/`eval date +%d` DIR1=~/.trafbil/log/$T/$T0 DIR2=~/.trafbil/log/$T mkdir -p $DIR PPP_IN=$(/sbin/ifconfig ppp0 | sed -ne 's/.*RX bytes:\([0-9]*\).*/\1/p') PPP_OUT=$(/sbin/ifconfig ppp0 | sed -ne 's/.*TX bytes:\([0-9]*\).*/\1/p') echo $PPP_OUT > $DIR/ppp.out echo $PPP_IN > $DIR/ppp.in PPP_IN_DAY_SUM=$(cat $DIR/*.in | awk '{s+=$1}END{print s}') PPP_OUT_DAY_SUM=$(cat $DIR/*.out | awk '{s+=$1}END{print s}') echo $PPP_IN_DAY_SUM > $DIR.in echo $PPP_OUT_DAY_SUM > $DIR.out PPP_IN_MONTH_SUM=$(cat $DIR1/*.in | awk '{s+=$1}END{print s}') PPP_OUT_MONTH_SUM=$(cat $DIR1/*.out | awk '{s+=$1}END{print s}') echo $PPP_IN_MONTH_SUM > $DIR1.in echo $PPP_OUT_MONTH_SUM > $DIR1.out PPP_IN_YEAR_SUM=$(cat $DIR2/*.in | awk '{s+=$1}END{print s}') PPP_OUT_YEAR_SUM=$(cat $DIR2/*.out | awk '{s+=$1}END{print s}') echo $PPP_IN_YEAR_SUM > $DIR2.in echo $PPP_OUT_YEAR_SUM > $DIR2.out fi # отдохнем 8 секунд (если вам цпу и винт не жалько можно и без слипа) sleep 8 # rm -f $FLAG done
А теперь для просмотра трафика создадим гуи-скрипт. я называл его gtrafbil
#!/bin/sh # by banda 2009 $Id: gtrafbil, v 0.1 2009-03-26 # Скрипт визуализации статистика трафика сгенерированной trafbil T=`eval date +%Y` T0=`eval date +%m` T2=`eval date +%H%M%S` DIR=~/.trafbil/log/$T/$T0/`eval date +%d` DIR1=~/.trafbil/log/$T/$T0 DIR2=~/.trafbil/log/$T din=$(cat $DIR.in) dout=$(cat $DIR.out) DAY_SUM=`expr $din + $dout` min=$(cat $DIR1.in) mout=$(cat $DIR1.out) MONTH_SUM=`expr $min + $mout` yin=$(cat $DIR2.in) yout=$(cat $DIR2.out) Y_SUM=`expr $yin + $yout` zenity --title "Подсчет трафика ГПРС" --info --text=" \nНа сегодня истратено `echo "$DAY_SUM/1024" | bc -s` Кб. Отсюда, \n исходящий \n$dout байт \n`echo "$dout/1024" | bc -s` Кб \n`echo "$dout/1048576" | bc -l` Мб \n входящий \n$din байт \n`echo "$din/1024" | bc -s` Кб \n`echo "$din/1048576" | bc -l` Мб \nЗа месяц `date '+%B'` использовано `echo "$MONTH_SUM/1048576" | bc -s` Мб. Отсюда, \n исходящий \n`echo "$mout/1024" | bc -s` Кб \n`echo "$mout/1048576" | bc -s` Мб \n входящий \n`echo "$min/1024" | bc -s` Кб \n`echo "$min/1048576" | bc -s` Мб \nЗа $T год использовано `echo "$Y_SUM/1048576" | bc -s` Мб. Отсюда `echo "$yin/1048576" | bc -s` Мб входящий и `echo "$yout/1048576" | bc -s` Мб исходящий" #Мой провайдер дает 150 Мб лимит за месяц: ($MONTH_SUM/1048576)*100/150 limit=`echo $MONTH_SUM/1572864 | bc -s` (echo $limit && sleep 60) | zenity --progress --auto-close --text="Истратено от лимита 150 Мб $limit %:"
Вот и все!
- 2603 просмотра


помоему тег billing для такого скрипта это забагато )))
А не проще ли грепать логи pppd?
e.g.
$ tail -3 /var/log/pppd.log
Mar 26 23:49:28 thinkpad pppd[10868]: Connect time 0.4 minutes.
Mar 26 23:49:28 thinkpad pppd[10868]: Sent 6704 bytes, received 1400 bytes.
Mar 26 23:49:28 thinkpad pppd[10868]: Connection terminated.
Это для меня не проще
А не пробовал vnstat? Очень легкая и простенькая статистика. Я тут о ней писал http://www.sklerosa.net/2008/08/01/prostoj-podschet-trafika/
А честно говоря, о нем я не знал.
Спасибо Сергей!
Я тоже ломал какое-то время мозг по этому вопросу, а потом думаю: "А на кой это все надо?"... Ведь мобила сама умеет трафик считать :)))
У меня Sony Ericsson K790i, в нем я иду в Меню -> Параметры -> закладка Вызовы -> Время и стоимость -> Счетчики данных :) И видим статистику за последний и все сеансы. А т.к. я перед выходом в сеть сбрасываю всегда этот счетчик, то и вижу естественно только последний выход в сеть :)
А за скрипты спасибо, на досуге потестю :)
А у меня на лаптопе например, СДМА модем - туда вставляю РУИМ карту и pon. Невозможно даже позвонит без спец.прогу. И нет никаких дисплейев :). А на десктопе тоже терминал без никаких экранчиков и кнопок - только для соединение интернет. А до этого был Нокиа 6275и, но всегда был лен лазит на его менюшку и ковырят там "сколько я использовал за сегодня или за месяц или за год"
Да, с этим безоговорочно :)
Отправить комментарий