Видео смотреть бесплатно

Free video online

Официальный сайт rnns 24/7/365

Смотреть видео бесплатно

WeLinux.ru

05.06.09 00:15lol2Fast4U

PythonОграничиваем себя в расходе трафика

Поскольку у меня лимитный интернет (предоплачено 500 мб в месяц, а платить больше абонентской платы не хочется), я решил написать небольшую программу (не хочется скриптом называть, но по сути это скрипт. даже интерфейса нету) - демон, который висит в фоне и снимает показания счетчика. Не воды, а трафика. Когда достигнут лимит - предупреждает и отключает. Писал для себя, но решил кинуть на Pastebin и дать линк в твиттер. Тут же @hublog поправил меня - надо писать while 1, а не придумывать переменную и писать while a == a.
Что полуичлось - под катом.
UPD: Версия 2.0, теперь все делается прямо, а не через ж0пу %) Старая версия здесь.

Просто меняем интерфейс и сколько надо мегабайт. Запускаем и смело идем в интернеты.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import commands, sys, time
device = 'ppp0' #network device. usually eth0 for ethernet, wlan0 for wifi, ppp0 for cdma/gsm
mb = 5 #allowed megabytes

def check(interface):
    pepyaka = open('/sys/class/net/' + device + '/statistics/rx_bytes', 'r')
    kb = int(pepyaka.read())/1024
    pepyaka.close()
    return kb

def fileupdate():
    f = open('spam', 'w')
    f.write(str(check(device)))
    f.close()

def fileread():
    f = open('spam', 'r')
    val = f.read()
    f.close()
    return val

while 1:
    fileupdate()
    foo = fileread()
    if int(foo) > 1024*mb:
        import dbus
        bus = dbus.SessionBus()
        proxy = bus.get_object('org.freedesktop.Notifications', '/org/freedesktop/Notifications')
        _dbus_notify = dbus.Interface(proxy, 'org.freedesktop.Notifications')
        commands.getoutput('/sbin/ifconfig ' + device + ' down')
        _dbus_notify.Notify('', 0, '', 'Stop!', 'Stop surfing internet. You are disconnected.', [], {'x': '0', 'y': '0'}, 5000)
        sys.exit(1)
    time.sleep(1)
 

P.S. Мой первый пост, кстати.
+13
xT05.06.09 00:32# +3
mb = 5 #allowed megabytes

Это, как я понимаю, отредактированный для публики вариант и примером является лимит в 5 мегабайт, а не твой лимит в 500мб?
lol2Fast4U05.06.09 11:13# +0
Ты не выключаешь комп, когда идешь спать?

За первые 3 дня я потратил 160мб. 500-160=340 - осталось. 10 мб за сутки. 5 ночью, 5 днем т.к. Скайлинк разделяет траф на ночной и дневной, очень удобно.
booley05.06.09 11:52# +0
Я не выключаю - т.к. это еще и хоум-сервер :)
xT05.06.09 12:00# +3
С появлением анлима выключать перестал. Когда сидел на гпрс - выключал.
ussr05.06.09 00:39# +0
угу, похоже на то. вообще надобность такого скрипта сомнительна. разве что на день себе трафик лимитировать.
partizan1305.06.09 00:59# +2
Если трафик стоит >3р за метр, то скрипт становится очень полезным.
lol2Fast4U05.06.09 11:13# +2
>на день себе трафик лимитировать.
Для этого он и предназначен!
krig05.06.09 00:40# +3
Не #via anus, а #per rectum =)
А в остальном - занимательно.
Username05.06.09 00:53# +-1
мне кажется, простора для упрощения тут полно. Зачем файлы создавать? Да и правильно, как я понимаю, использовать не ppp0, а дефолтный route
lol2Fast4U05.06.09 11:17# +0
Файл создается для того, что если слегка модифицировать скрипт...
Если связь пропадет, скрипт завершится. Когда начнется опять, и скрипт будет считать с места разрыва :)
lol2Fast4U05.06.09 11:48# +0
Ошибся, не слегка. Там не очень понятно, как определить разрыв...
drujebober05.06.09 01:39# +2
а может проще будет воспользоваться содержимым файликов
1
2
3
4
% cat /sys/class/net/wifi0/statistics/[t,r]x_bytes
542932797
25180003
 

чем парсить вывод ифконфига? :)
lomereiter05.06.09 07:10# +2
+1. Или можно удосужиться регулярки подучить:
1
2
3
4
5
6
7
8

import re
...
try:
    return int(re.search(r"RX bytes:(\d+)\s+", commands.getoutput("/sbin/ifconfig " + interface)).groups()[0])/1024
except:
    return 'FAIL'
 
lol2Fast4U05.06.09 11:39# +0
Да, проще. Спасибо, сейас обновлю
NucleoFag05.06.09 02:45# +0
С 1м постом!

p.s. чую щас понасоветуют, будешь юзать высокоскоростной оптимизированный безлимитный тырнет из-за скрипта, переделанного в однострочный.. ;)
booley05.06.09 10:47# +1
Вижу чувак написал первый пост. Где-то к половине скрипта было ощущение, что в комментах будет полно поправок. Так и вышло. ;)
lol2Fast4U05.06.09 11:20# +1
Спасибо :)
Однострочный - это на перле который, запускает патч Бармина?
NucleoFag05.06.09 11:31# +0
Ну, не исключено, тот вообще от проблем избавит =)
А вообще я просто писал про аццкую оптимизацию... Товарищи есть, которые мне скрипт из 50 строчек в 1 длинную переделывали на перле. Правда не очень то он и деструктивным получался, выполнял тока штатные функции
lol2Fast4U05.06.09 11:39# +0
Да в интернетах мануалы есть по такой оптимизации, любой перл-скрипт переделать можно.
vovka05.06.09 07:30# +1
а весь процессор не жрет? А то time.sleep(1) не заметил в бесконечном цикле.
lol2Fast4U05.06.09 11:18# +0
У меня на Celeron 900 вообще не заметно.
exelens05.06.09 15:02# +0
Создал блог Python и перенёс туда
cppmm05.06.09 15:50# +0
Интересная штука. Когда сидел на GPRS, было бы актуально(правда, я бы предпочёл использовать для этого bash или perl, но это уже вопросы религии :)).
Правда, я для себя проблемы с лимитированием и экономией траффика решил тогда несколько иначе. Так сказать, админским способом - поднял кеширующий dns, для ускорения работы и экономии(на самом деле dns-запросы немало откушивают) и проксю с большим кешем, банерорезкой(тут особо стоит отметить, что в отличии от всяких adblock'ов и подобных плагинов лисы, прокся не скачивает зарезаный объект, что тоже ощутимо экономит траффик) и лимитированием с мониторингом. Вот, до чего доводит людей медленный и ограниченный инет. :)
К счастью, теперь у меня анлим, но прокся так и крутится с dns'ом.
lol2Fast4U05.06.09 19:30# +0
Экономию трафика решает toonel.net. Но он не мешает много скачать :)
evgenyl05.06.09 17:17# +5
А ещё можно так например сделать
iptables -A INPUT -s !192.168.0.0/16 -m quota --quota 5242880 -j ACCEPT
iptables -A INPUT -s !192.168.0.0/16 -j DROP

-s !192.168.0.0/16 - на вкус, можно заменить на -i ppp0
Username05.06.09 18:17# +1
самое зачотное решение
lol2Fast4U05.06.09 19:28# +0
Слишком жестоко. Не предупреждает юзера. Да и правильнее отключать ifconfig'ом, имхо.
evgenyl06.06.09 11:04# +2
Я привел лиш ещё один способ, сделать тоже самое, твой способ ничем не хуже.
Вместе, мы демонстрируем богаство выбора, ситуаций возможно бесконечное множество и под каждую, несуществует единого правильного решения :)
lol2Fast4U06.06.09 17:06# +0
Да, да :) Но все же без предупреждения жестоко, это либо для совсем интернет-зависимых, либо другу на 1 апреля незаметно поставить:)
evgenyl08.06.09 10:54# +0
Я бы объеденил твой способ и мой, проверял кончилась ли квота и выдавал сообщение, иначе обычный браузер 20-30 закладок с обилием флэша сожрут ресурсы систему и какая нибуть закачка успеет накачать лишнего.

А ещё там где лежит скрипт, случайно кончится место, потому что ты тудаже качал очередной фильм и не расчитал свободное место, питон застрелится, а ты будеш думать что у тебя ещё много трафика в запасе.
Хорошо бы это поправить.
radioteh13.06.09 14:21# +0
ещё правка:
В данном случае не сильно важно, но логичнее не так:
def check(interface):
pepyaka = open('/sys/class/net/' + device + '/statistics/rx_bytes', 'r')
а
def check(interface):
pepyaka = open('/sys/class/net/' + interface + '/statistics/rx_bytes', 'r')
lol2Fast4U13.06.09 22:18# +0
interface - передается функции check, то есть становится device.
P.S. А еще скажи, что pepyaka - логичнее не так.
radioteh14.06.09 21:18# +0
Во первых: написал же, в данном случае не важно. Во вторых: вдруг при модификации захочется контролировать два интерфейса и появиться device2? Функция-то независимо от переданного параметра вернёт данные по device :-) До кучи: если писать в функции device, нафига ей тогда параметр? :-)
P.S. А еще скажи, что pepyaka - логичнее не так.
- Вот
этого вообще не понял :-)

Top блогов (все)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Top пользователей (все)
Топ пользователей Топ блогов
Новенькие: nikebl, renya, micro, vanDake, pasha220992
welinux.ru
Идея сайта exelens; Движок 0byte, разработчик nvbn; Дизайн - Astramak

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн