Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Скрипт ограничитель трафика  (Прочитано 2732 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Скрипт ограничитель трафика
« : 09 Августа 2010, 14:14:09 »
Помогите написать скрипт, проверяющий скачанный трафик. Чтобы ставил в день определённое количество мб, при их окончании интернет не включался или выводилось сообщение.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #1 : 09 Августа 2010, 14:32:02 »
ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 500000); print "Trafic overconsumption!" ; system("ifconfig eth0 down"); } '
« Последнее редактирование: 09 Августа 2010, 17:19:52 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #2 : 09 Августа 2010, 16:20:08 »
Вместо print иногда лучше использовать zenity.
zenity --error --text="Хорош качать порнуху."

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #3 : 09 Августа 2010, 17:19:29 »
Да там еще много чего улучшать и отлаживать надо.
Например, проверить, что интерфейс уже не в дауне, что других копий этого скрипта не запущено, еще что-нибудь, так навскидку не соображу...
После этого его можно вешать в крон.

Да! ТС, а основная идея-то понятна? :)
Если нет, поясню.
Есть такая утилита ifconfig, предназначенная для управления сетевыми интерфейсами.
Если ее запустить с единственным параметром - именем интерфейса, она напишет его всевозможные адреса, параметры и метрики и в конце - сколько через него прошло байтов и пакетов внутрь, в систему (RX) и во внешний мир (TX).
Этот вывод разбирается в команде awk, оттуда достается число, сравнивается с порогом (я от фонаря взял 500000), дальше вызывается команда ifconfig eth0 down, выключающая этот интерфейс.

Дальше копайте маны.
man awk
man ifconfig
man cron
« Последнее редактирование: 09 Августа 2010, 17:21:38 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #4 : 09 Августа 2010, 19:12:02 »
Спасибо!  :D Только скрипт у меня не работает. :(
При любом количестве скачанных байт, сразу выводит Trafic overconsumption!
(Нажмите, чтобы показать/скрыть)

« Последнее редактирование: 09 Августа 2010, 20:35:40 от ya_vovan »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #5 : 10 Августа 2010, 13:13:44 »
Отлаживайте. :)

Поизучайте, что выводит ifconfig, что выводит ifconfig eth0.

Дальше - что выводит обрезанная версия скрипта:
ifconfig eth0| awk 'BEGIN{FS="[ :]+"} /RX bytes/{ print $4; }'
У меня она пишет потребленный трафик в байтах.
$4 - это четвертое поле, в строке, содержащей RX bytes, там эта цифра и находится.
Вероятно, у вас оно не четвертое (хотя, это странно...)
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #6 : 10 Августа 2010, 14:07:43 »
al@ubuntu-desktop1:~$ ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 500000); print "Trafic overconsumption!" ; }'
97630772
Trafic overconsumption!
al@ubuntu-desktop1:~$

al@ubuntu-desktop1:~$ ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 500000000); print "Trafic overconsumption!" ; }'
97723776
Trafic overconsumption!
al@ubuntu-desktop1:~$

al@ubuntu-desktop1:~$ ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 500000000) print "Trafic overconsumption!" ; }'
98139374
al@ubuntu-desktop1:~$

al@ubuntu-desktop1:~$ ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 5000000) print "Trafic overconsumption!" ; }'
98198642
Trafic overconsumption!
al@ubuntu-desktop1:~$

ЗЫ. 
Может так пойдет.

ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 500000){ print "Trafic overconsumption!" ; system("ifconfig eth0 down"); }} '
« Последнее редактирование: 10 Августа 2010, 14:21:42 от alexander.pronin »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #7 : 10 Августа 2010, 15:31:44 »
Точка с запятой лишняя затесалась.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #8 : 10 Августа 2010, 15:36:42 »
Какие то хитрые у вас способы. Я бы обошелся таким:
#!/bin/bash
#Tue Aug 10 15:21:01 MSD 2010

in=`cat /proc/net/dev |grep ppp0 |awk '{print $2}'`
out=`cat /proc/net/dev |grep ppp0 |awk '{print $10}'`
limit=2199060


full=$(echo "scale=3; $in+$out" | bc)

# $full > $limit
if [ "$full" -gt "$limit" ]; then
ifconfig ppp0 down
fi

exit

Все в байтах, так что лимит просто рассчитайте на калькуляторе. Запускать от root. Вообще в цикле if можно вставить что угодно. Можно конечно и через while реализовать, но это наверно не нужно.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #9 : 10 Августа 2010, 15:44:39 »
Как понятнее и быстрее, так и надо делать.
Вариантов изготовления зелья в Линукс хватает.

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #10 : 10 Августа 2010, 21:24:47 »
 :D Наконец то заработало!

Оффлайн xkool

  • Старожил
  • *
  • Сообщений: 1459
  • do not love my brain
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #11 : 10 Августа 2010, 21:32:18 »
Отпишись, с каким вариантом заработало.
Лучше маленький доллар, чем большое спасибо.

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #12 : 10 Августа 2010, 21:48:32 »
Заработал исправленный вариант 8)
ЗЫ.  
Может так пойдет.
ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > 500000){ print "Trafic overconsumption!" ; system("ifconfig eth0 down"); }} '
Всё теперь буду улучшать скрипт, может и гуй напишу.(пока расчитываю написать только текстовый :P)


Пользователь решил продолжить мысль 11 Августа 2010, 18:13:56:
Скажите пожалуйста почему так скрипт не работает -
#!/bin/bash
cat .traff-conf $1
ifconfig eth0| awk 'BEGIN {FS="[ :]+"}/RX bytes/ { print $4; if($4 > $1){ print "Trafic overconsumption!" ; system("ifconfig eth0 down"); }} '
Выводит -
$bash traff
111111111111111111111111111111111
1291213
Trafic overconsumption!
« Последнее редактирование: 12 Августа 2010, 15:07:02 от ya_vovan »

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #13 : 11 Августа 2010, 19:54:59 »
А вы под root-ом его запускаете? Для того что бы выполнить "ifconfig eth0 down" нужны привилегии root-а.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн RQWERQWER

  • Автор темы
  • Активист
  • *
  • Сообщений: 252
    • Просмотр профиля
Re: Скрипт ограничитель трафика
« Ответ #14 : 12 Августа 2010, 15:26:35 »
Да не в том дело. Как я добавил к скрипту cat .traff-conf $1 и заменил $4 > 500000 на $4 > $1 то скрипт перестал работать.

 

Страница сгенерирована за 0.02 секунд. Запросов: 22.