Создание программы учета траффика (Подскажите идею)

Модератор: Модераторы разделов

Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Создание программы учета траффика

Сообщение anterior »

Здравствуйте! Создаю программу учета траффика. Застопорился на одной проблеме. Суть программы такова: Есть некоторый файл /etc/ppp/ip-up.d/netstat-run.sh в котором содержится вызов моей проги с некоторым параметром. Прога записывает в лог файл время начала ppp соеденения. Перед тем как пользователь разъеденяется по ЛОГИКЕ моей программы она должна из файла /proc/net/dev считать список всех сетевых интерфейсов сколько каждый из них принял/передал и всю эту информацию записать в лог(в том числе и время окончания соединения). Так вот у меня вопрос и состоит в том что как перед разъединением выполнить еще раз мою прогу(скрипт вызывающий мою прогу с опред. параметром) чтобы она записала все в лог. Я вообще-то думал что скрипты в папке /etc/ppp/ip-down.d/ выполняются до разъединения, оказывается это не так. Во время выполнения этих скриптов нужный сетевой интерфейс уже отсутствует в файле /proc/net/dev, и информацию сколько было принято/передано байт я уже не узнаю :( Может кто знает как быть? Может есть какие-то другие варианты?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Создание программы учета траффика

Сообщение sash-kan »

(мечтательно) если бы все было так просто...
(горько вздохнув) статистику все-таки надо собирать периодически-принудительно.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Re: Создание программы учета траффика

Сообщение anterior »

Короче сделал так: Моя прога живет в качестве демона. В программе через каждые 3 секунд(таймер) сверяются 2 файла - /proc/net/dev и предыдущая копия этого файла(сделанная 3 сек. назад) если есть какие-то изменения (добавление удаления интерфейса) то это все записывается в лог. Вот глядите чего она мне написала:

Код: Выделить всё

09/09/06 23:22:13: Интерфейс удален modem0: (принято: 54914 передано: 12405)
09/09/06 23:21:49: Интерфейс добавлен modem0: (принято: 0 передано: 0)
09/09/06 23:20:58: Интерфейс добавлен sit0: (принято: 0 передано: 0)
09/09/06 23:20:58: Интерфейс добавлен lo: (принято: 20214 передано: 20214)

:rolleyes:
Вот тот который modem0 это мое соеденение через модем. Интересно что сравнивая статистику принятых и переданных байт в моем логе - (принято: 54914 передано: 12405), в журнале программы KInternet с помощью которой я соединялся принятых/переданных байт всегда немного меньше - Sent 12308, received 53350 bytes

Моя прога в принципе преувеличивать не может, так как вся информация берется из /proc/dev/net. Почему же все таки есть разница?
Спасибо сказали:
Аватара пользователя
WarlorD
Сообщения: 728
Статус: хочешь пропатчить KDE под FreeBSD - спроси меня как!
ОС: FreeBSD, Debian GNU\Linux

Re: Создание программы учета траффика

Сообщение WarlorD »

рекомендую посмотреть как реализуется подсчет в netams - благо исходники есть.
FreeBSD
Debian GNU\Linux
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Спасибо сказали:
Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Re: Создание программы учета траффика

Сообщение anterior »

WarlorD писал(а): ↑
11.09.2006 01:17
рекомендую посмотреть как реализуется подсчет в netams - благо исходники есть.

Да, хорошая программа но там совсем другой и похоже намного более сложный принцип сбора информации (не через /proc). Я пишу что-то более похожее на vnstat
Спасибо сказали:
Аватара пользователя
WarlorD
Сообщения: 728
Статус: хочешь пропатчить KDE под FreeBSD - спроси меня как!
ОС: FreeBSD, Debian GNU\Linux

Re: Создание программы учета траффика

Сообщение WarlorD »

Да, принцип там другой, помоему, через libcap в случае с linux, хотя она работает и на многих других платформах.
FreeBSD
Debian GNU\Linux
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Спасибо сказали:
Аватара пользователя
BaZilio
Сообщения: 457
Статус: Say оПХБЕР again!

Re: Создание программы учета траффика

Сообщение BaZilio »

Почему бы не пойти путём цепочек в iptables? Считаем только то, что нужно, обнуляем когда нужно... лично мне так удобнее всего :)

Скажем, на поднятие интерфейса делаем цепочку, заворачиваем туда траффик этого интерфейса, и при выключении интерфейса снимаем статистику, и удаляем цепочку (или просто обнуляем).

Windows XP:
Netbook - Acer Aspire One A150.
Debian Squeeze amd64:
Laptop - Acer TravelMate 5520G.
Laptop_work - Toshiba Satellite C660.
Windows 7 x64:
Desktop - Core2Duo 6600 2.4GHz/6 GB/i965/GeForce 9500GT.

4 the lulz!
Спасибо сказали:
Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Re: Создание программы учета траффика

Сообщение anterior »

BaZilio писал(а): ↑
12.09.2006 00:52
Почему бы не пойти путём цепочек в iptables? Считаем только то, что нужно, обнуляем когда нужно... лично мне так удобнее всего :)


Это вариант но намного более сложный и к сожалению я пока вообще не в курсе что такое эти iptables, надо читать и думать. К тому же я как понимаю к iptables нужны права root'а Так что может в последующих версиях и перейду на ip-tables, а пока пусть берет инфу из /proc
Кстати демон уже готов :rolleyes: , и теперь вместо логов в обычный текстовый файл он пишет в журнал-базу данных sqlite3. Теперь остается написать программку которая читает этот журнал и показывает пользователю соответствующую статистику в удобном виде, а пока статистику можно просмотреть так:

Код: Выделить всё

>sqlite3 db
1|||lo|33617|33617
2|||sit0|0|0
3|2006-09-12 20:44:22|2006-09-12 20:46:13|modem0|142693|130141
4|2006-09-12 21:04:16||modem0|1198|2088

где 2 колонка это время создания интерфейса(может отстутствовать если интерфейс уже был создан до запуска демона), 3 колонка есть время окончания(тоже может отсутствовать если интерфейс еще не удален), 4-я есть имя интерфейса, последние это кол-во принятых/переданных байт
Вот так :)
Спасибо сказали:
sidor
Сообщения: 118

Re: Создание программы учета траффика

Сообщение sidor »

ИМХО если у тебя юзеры устанавливают ppp-соединение - прямая дорога изучать протокол radius и уже под него писать биллинг.
Если я конечно правильно задачу понял...
Спасибо сказали:
Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Re: Создание программы учета траффика

Сообщение anterior »

sidor писал(а): ↑
12.09.2006 16:11
Если я конечно правильно задачу понял...


Понимаете, для чего я вообще взялся для написания такой программы: Я пользуюсь спутниковым инетом + GPRS через OpenVPN, мне надо подсчитывать сколько я передал и принял. Ну не нашел я ни одной подходящей для этого программы в инете, пришлось писать самому. Если какие и были то очень сложные предназначенные для сети, серваков и всего прочего... Еще была vnstat но имхо какая-то глючная, пишет ерунду. А у меня цель - сколько я передал через GPRS и сколько принял через спутник, и сколько я скачиваю вообще в день/неделю/месяц
Спасибо сказали:
sidor
Сообщения: 118

Re: Создание программы учета траффика

Сообщение sidor »

Ну если упростить немного... Исходящий трафик у тебя через GPRS, входящий через спутник. Собственно получается просто надо посчитать входящий и исходящий. Так? Ну тогда тут можно и просто iptables использовать. Как самое простое. Зачем к интерфейсам привязываться? Просто считать трафик... Или у тебя трафик как-то еще сгенерироваться может?
Спасибо сказали:
Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Re: Создание программы учета траффика

Сообщение anterior »

sidor писал(а): ↑
13.09.2006 12:00
Ну тогда тут можно и просто iptables использовать.


Интересно, по запросу man:/iptables мне выдалось информация о программе с огромным количеством параметров и непонятных слов да еще и на английском. Прогуглив я тоже не обнаружил для себя особо нужной мне информации. Вы не могли бы дать какой-нибудь простенький пример использования iptables? Буду очень признателен
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Создание программы учета траффика

Сообщение v04bvs »

попробуйте здесь почитать
http://www.opennet.ru/docs/RUS/iptables/
Спасибо сказали:
Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

Re: Создание программы учета траффика

Сообщение anterior »

v04bvs писал(а): ↑
13.09.2006 16:43
попробуйте здесь почитать
http://www.opennet.ru/docs/RUS/iptables/


Спасибо за ссылку, кажется научился пользоваться iptables:

Код: Выделить всё

# iptables -A INPUT -i dvb0_0
# iptables -A OUTPUT -o modem1
...
# iptables -v -L
...


:)

Неплохо было бы теперь научится пользоватся iptables-devel, чтобы модифицировать свою программу чтобы она брала всю информацию из iptables
Спасибо сказали: