Создание программы учета траффика (Подскажите идею)
Модератор: Модераторы разделов
-
anterior
- Сообщения: 266
- ОС: Debian amd64
Создание программы учета траффика
Здравствуйте! Создаю программу учета траффика. Застопорился на одной проблеме. Суть программы такова: Есть некоторый файл /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: Создание программы учета траффика
(мечтательно) если бы все было так просто...
(горько вздохнув) статистику все-таки надо собирать периодически-принудительно.
(горько вздохнув) статистику все-таки надо собирать периодически-принудительно.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
anterior
- Сообщения: 266
- ОС: Debian amd64
Re: Создание программы учета траффика
Короче сделал так: Моя прога живет в качестве демона. В программе через каждые 3 секунд(таймер) сверяются 2 файла - /proc/net/dev и предыдущая копия этого файла(сделанная 3 сек. назад) если есть какие-то изменения (добавление удаления интерфейса) то это все записывается в лог. Вот глядите чего она мне написала:
Вот тот который modem0 это мое соеденение через модем. Интересно что сравнивая статистику принятых и переданных байт в моем логе - (принято: 54914 передано: 12405), в журнале программы KInternet с помощью которой я соединялся принятых/переданных байт всегда немного меньше - Sent 12308, received 53350 bytes
Моя прога в принципе преувеличивать не может, так как вся информация берется из /proc/dev/net. Почему же все таки есть разница?
Код: Выделить всё
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)Вот тот который modem0 это мое соеденение через модем. Интересно что сравнивая статистику принятых и переданных байт в моем логе - (принято: 54914 передано: 12405), в журнале программы KInternet с помощью которой я соединялся принятых/переданных байт всегда немного меньше - Sent 12308, received 53350 bytes
Моя прога в принципе преувеличивать не может, так как вся информация берется из /proc/dev/net. Почему же все таки есть разница?
-
WarlorD
- Сообщения: 728
- Статус: хочешь пропатчить KDE под FreeBSD - спроси меня как!
- ОС: FreeBSD, Debian GNU\Linux
Re: Создание программы учета траффика
рекомендую посмотреть как реализуется подсчет в netams - благо исходники есть.
FreeBSD
Debian GNU\Linux
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Debian GNU\Linux
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
-
anterior
- Сообщения: 266
- ОС: Debian amd64
Re: Создание программы учета траффика
Да, хорошая программа но там совсем другой и похоже намного более сложный принцип сбора информации (не через /proc). Я пишу что-то более похожее на vnstat
-
WarlorD
- Сообщения: 728
- Статус: хочешь пропатчить KDE под FreeBSD - спроси меня как!
- ОС: FreeBSD, Debian GNU\Linux
Re: Создание программы учета траффика
Да, принцип там другой, помоему, через libcap в случае с linux, хотя она работает и на многих других платформах.
FreeBSD
Debian GNU\Linux
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
Debian GNU\Linux
Компьютер позволяет решать все те проблемы, которые до изобретения компьютера не существовали.
-
BaZilio
- Сообщения: 457
- Статус: Say оПХБЕР again!
Re: Создание программы учета траффика
Почему бы не пойти путём цепочек в 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: Создание программы учета траффика
Это вариант но намного более сложный и к сожалению я пока вообще не в курсе что такое эти iptables, надо читать и думать. К тому же я как понимаю к iptables нужны права root'а Так что может в последующих версиях и перейду на ip-tables, а пока пусть берет инфу из /proc
Кстати демон уже готов
Код: Выделить всё
>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: Создание программы учета траффика
ИМХО если у тебя юзеры устанавливают ppp-соединение - прямая дорога изучать протокол radius и уже под него писать биллинг.
Если я конечно правильно задачу понял...
Если я конечно правильно задачу понял...
-
anterior
- Сообщения: 266
- ОС: Debian amd64
Re: Создание программы учета траффика
Понимаете, для чего я вообще взялся для написания такой программы: Я пользуюсь спутниковым инетом + GPRS через OpenVPN, мне надо подсчитывать сколько я передал и принял. Ну не нашел я ни одной подходящей для этого программы в инете, пришлось писать самому. Если какие и были то очень сложные предназначенные для сети, серваков и всего прочего... Еще была vnstat но имхо какая-то глючная, пишет ерунду. А у меня цель - сколько я передал через GPRS и сколько принял через спутник, и сколько я скачиваю вообще в день/неделю/месяц
-
sidor
- Сообщения: 118
Re: Создание программы учета траффика
Ну если упростить немного... Исходящий трафик у тебя через GPRS, входящий через спутник. Собственно получается просто надо посчитать входящий и исходящий. Так? Ну тогда тут можно и просто iptables использовать. Как самое простое. Зачем к интерфейсам привязываться? Просто считать трафик... Или у тебя трафик как-то еще сгенерироваться может?
-
anterior
- Сообщения: 266
- ОС: Debian amd64
Re: Создание программы учета траффика
Интересно, по запросу man:/iptables мне выдалось информация о программе с огромным количеством параметров и непонятных слов да еще и на английском. Прогуглив я тоже не обнаружил для себя особо нужной мне информации. Вы не могли бы дать какой-нибудь простенький пример использования iptables? Буду очень признателен
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Создание программы учета траффика
попробуйте здесь почитать
http://www.opennet.ru/docs/RUS/iptables/
http://www.opennet.ru/docs/RUS/iptables/
-
anterior
- Сообщения: 266
- ОС: Debian amd64
Re: Создание программы учета траффика
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