Обсуждение способов подсчета траффика.

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

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

Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Обсуждение способов подсчета траффика.

Сообщение Alex2ndr »

Роман Торопов писал(а):
04.07.2009 16:43
Ну добавлю ещё свою версию (SQUID+MySQL+Apache) ...

Почитал ваш сайт и немножко форум. Не понял самого главного - что эта система может - куча инструкций по тому как это настроить, но не ясно что получим в итоге. Можете пояснить?

Я поясню свой интерес - сам пишу нечто подобное - Парсинг логов Squid - Вопросы - но у меня есть вопросы - может вы знаете ответы?
Спасибо сказали:
Аватара пользователя
Роман Торопов
Сообщения: 47
ОС: Mandriva CS-4, все PP+

Re: Обсуждение способов подсчета траффика.

Сообщение Роман Торопов »

Alex2ndr писал(а):
28.07.2009 15:30
Роман Торопов писал(а):
04.07.2009 16:43
Ну добавлю ещё свою версию (SQUID+MySQL+Apache) ...

Почитал ваш сайт и немножко форум. Не понял самого главного - что эта система может - куча инструкций по тому как это настроить, но не ясно что получим в итоге. Можете пояснить?

Авторизирует юзеров (логин/пароль), Считает трафик юзеров, отключает от инета при привышении лимитов (для каждого юзера отдельно) там-же есть скриншоты, смотрите ...
CPU Intel Xeon E5462 (2.8/1.6 GHz) 2шт.
MB SuperMicro X7DWE
Adaptec ASR-52445
HDD SATA-II Seagate 1TB ST31000340NS 24 шт
Ethernet Intel® 82598EB 10 Gigabit EXPX9501AFXSR
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Обсуждение способов подсчета траффика.

Сообщение Alex2ndr »

Роман Торопов писал(а):
28.07.2009 15:36
Авторизирует юзеров (логин/пароль), Считает трафик юзеров, отключает от инета при привышении лимитов (для каждого юзера отдельно) там-же есть скриншоты, смотрите ...

Спасибо за скриншоты - просто найти их там с налета я не смог :blush:
Уточняющий вопрос - считает трафик только по http? а по pop3 или smtp например?
PS создал темку на вашем форуме - Тема - можем перенести обсуждение туда если хотите.
Спасибо сказали:
Аватара пользователя
Роман Торопов
Сообщения: 47
ОС: Mandriva CS-4, все PP+

Re: Обсуждение способов подсчета траффика.

Сообщение Роман Торопов »

Alex2ndr писал(а):
28.07.2009 15:55
Уточняющий вопрос - считает трафик только по http? а по pop3 или smtp например?

http/ftp (всё что пробразывается через http - ssh, https и т.д.) - как настроиш squid то и будет считать.
Т.к. система просто собирает лог squid-а, помещает в базу MySQL, а Apache - читает и управляет пользователями и их данными в базе.

Система гибкая как конструктор... К примеру одному парню, под заказ делал по IP, которая в раелтаме вкл/выкл IP-шники в IPTABLES ...
а также вот себе, по такому же принципу, соорудил подсчет трафика FTP-сервера (реально работающий сервак):
1. статистика
2. содержание
CPU Intel Xeon E5462 (2.8/1.6 GHz) 2шт.
MB SuperMicro X7DWE
Adaptec ASR-52445
HDD SATA-II Seagate 1TB ST31000340NS 24 шт
Ethernet Intel® 82598EB 10 Gigabit EXPX9501AFXSR
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo

Re: Обсуждение способов подсчета траффика.

Сообщение Brainsburn »

Решил потестить vnstat. Заметил особенность - она сама не обновляет информацию. Поставил в крон vnstat -u на каждые 5 минут. Так не должно быть или это нормально?
Спасибо сказали:
GeAlex
Сообщения: 148

Re: Обсуждение способов подсчета траффика.

Сообщение GeAlex »

Brainsburn писал(а):
02.09.2009 02:09
Решил потестить vnstat. Заметил особенность - она сама не обновляет информацию. Поставил в крон vnstat -u на каждые 5 минут. Так не должно быть или это нормально?
Да ключ -u обновляет информацию в базе, но вообще задание в cron должно было автоматически создаться при установке пакета (в Debian и Mandriva по крайней мере так).
Там такая команда

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

if [ -x /usr/bin/vnstat ] && [ `ls /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi
каждые 5 минут.
В крон можно добавить задание для снятия дампа с базы статистики для дальнейшего использования с вебмордой
например

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

vnstat --dumpdb -i eth0 > ~/public_html/vnstat/dumps/vnstat_dump_eth0
и в крон.
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo

Re: Обсуждение способов подсчета траффика.

Сообщение Brainsburn »

GeAlex писал(а):
02.09.2009 03:42
Brainsburn писал(а):
02.09.2009 02:09
Решил потестить vnstat. Заметил особенность - она сама не обновляет информацию. Поставил в крон vnstat -u на каждые 5 минут. Так не должно быть или это нормально?

Да ключ -u обновляет информацию в базе, но вообще задание в cron должно было автоматически создаться при установке пакета (в Debian и Mandriva по крайней мере так).
Там такая команда

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

if [ -x /usr/bin/vnstat ] && [ `ls /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi
каждые 5 минут.

Ага, точно, там надо было пару строчек раскомментировать.
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: Обсуждение способов подсчета траффика.

Сообщение patrius »

Есть ли какой-нибудь способ собрать статистику для MRTG с помощью iptables? и соответственно как передать данные? Сохранять и(или) считать необходимости нет, нужна только статистика для "кормёжки" MRTG.
Спасибо сказали:
uNReg
Сообщения: 7
ОС: Ubuntu 8.04

Re: Обсуждение способов подсчета траффика.

Сообщение uNReg »

общая схема:
isp - GW - lan

GW работает под управлением ОС семейства Linux
Учет статистики сетевых интерфейсов на GW:
  • ntop
  • darkstat
  • vnstat + vnstat php frontend


Поставив proxy (squid, 3proxy, etc) и при помощи netfilter завернуть http трафик на этот proxy, получаем log файл
этот log файл может быть проанализирован, и на основе анализа можно построить отчеты при помощи лог анализатора
примеры:
  • free-sa
  • mysar
  • sarg
  • lightsquid

мониторинг состояния squid
  • sqstat
  • sarg



Следующий момент
Учёт трафика локальной сети с помощью fprobe и flow-tools
http://www.ylsoftware.com/news/492
учет всего трафика, не только того, что прошел через proxy
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Обсуждение способов подсчета траффика.

Сообщение pelmen »

butch писал(а):
30.04.2009 15:20
замечу, на всякий случай, что сейчас некомильфо собирать информацию о проходящий пакетах с помощью ulog
используйте ipt_netflow.
работает довольно просто и менее требователен к ресурсам. при этом на выходе получаете нетфлоу, считающийся стандартом
Можно подробнее об этом ipt_netflow?

Я что-то не разобрался с vnstat. Он не считает по внутренним ip ? Только на интерфейсе в целом?

apt-cache search ipcad
apt-cache search ipt_netflow
ничего не выдали
Нашел "ipt_netflow - module for iptables", но на странице http://www.opennet.ru/docs/RUS/iptables/ поиском ipt_netflow не найдено
Нашел тут http://sourceforge.net/projects/ipt-netflow/ но что с ним делать пока не нашел. Запрос делаю виду ipt_netflow howto
Что это вообще? Модулб для iptables, который информацию (кто качает, откуда и сколько весит) заносит куда-то? Как им пользоваться, не вижу, везде только "настроил ipt_netflow, не работает то-то..."
google: "считаем трафик ipt_netflow" тоже как-то не то :(

Нашел http://www.netams.com/phpBB3/viewtopic.php?f=2&t=4510 (netams howto)
Конфиг. файл запутанный, телнетиться надо каждый раз... )) ЖЕСТЬ
4.Подключаемся к NetAMS с помощью telnet:
telnet localhost 20001
Вводим логин admin и пароль прописанный в конфиге
/etc/netams.cfg
далее вводим команду html, show config, show version, save.
Выходим из telnet и перезапускаем NetAMS.
(чтобы произошла корректная привязка сгенерированных OID юнитов
к базе данных).
Снова Подключаемся к NetAMS с помощью telnet.
Устанавливаем квоты и логинЫ, из конфига эти параметры в базу
не вносятся и если не установить в telnet, то после рестарта
NetAMSa они пропадут.
Так же после установки всех параметров и начального
формирования конфига(можно и позже), необходимо его сохранить
командой save в telnet и перезапустить демон NetAMS, иначе
возможна неработоспособность сервиса генерирования html страниц.
В итоге пытался с помощью документации на сайте разобраться с netams, так ничего путного и не вышло. Почему-то в mysql ничего не падает после запуска.
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Обсуждение способов подсчета траффика.

Сообщение Alex2ndr »

pelmen писал(а):
16.11.2009 13:12
Можно подробнее об этом ipt_netflow?

Я так понимаю это сенсор netflow сделанный модулем для iptables. Если вы не знаете что такое сенсор netflow то вам сюда - Wiki

pelmen писал(а):
16.11.2009 13:12
apt-cache search ipcad

Зря его ищите - ipcad нужно из исходников собирать. Насколько я знаю его обычно с FreeBSD используют - в Linux много аналогов собранных и уже в репозиториях(fprobe, softflowd и тд.).

pelmen писал(а):
16.11.2009 13:12
apt-cache search ipt_netflow
ничего не выдали
Нашел "ipt_netflow - module for iptables", но на странице http://www.opennet.ru/docs/RUS/iptables/ поиском ipt_netflow не найдено
Нашел тут http://sourceforge.net/projects/ipt-netflow/ но что с ним делать пока не нашел.

Его нет в репах - только из исходников собирать. И уж конечно это не стандартный модуль - поэтому в документации его тоже нету.


pelmen писал(а):
16.11.2009 13:12
Запрос делаю виду ipt_netflow howto
Что это вообще? Модулб для iptables, который информацию (кто качает, откуда и сколько весит) заносит куда-то? Как им пользоваться, не вижу, везде только "настроил ipt_netflow, не работает то-то..."
google: "считаем трафик ipt_netflow" тоже как-то не то :(

Я уже говорил выше - сенсор для netflow. Парой постов выше была ссылка на howto по настройке учета трафика на netflow - http://www.ylsoftware.com/news/492
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Обсуждение способов подсчета траффика.

Сообщение pelmen »

А чем плох вариант iptables + ulog + mysql + php ? Где-то видел, что эту связку критикуют за то, что при большом количестве клиентов за шлюзом пропадают пакеты (т.е. не обо всех пакетах информация попадает в базу)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Обсуждение способов подсчета траффика.

Сообщение eddy »

Я на домашнем компьютере использую squid + sarg. Правда и здесь есть свои недостатки: если хочешь иметь статистику за достаточно большой промежуток времени, приходится хранить все логи прокси, плюс он неправильно считает трафик: показывает количество информации, выданное им, а не принятое с родительского прокси.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Rommel.ua
Сообщения: 65

Re: Обсуждение способов подсчета траффика.

Сообщение Rommel.ua »

patrius писал(а):
19.10.2009 22:41
Есть ли какой-нибудь способ собрать статистику для MRTG с помощью iptables? и соответственно как передать данные? Сохранять и(или) считать необходимости нет, нужна только статистика для "кормёжки" MRTG.


В айпитейблах для каждой цепочки ведется счет пакетов и байт.
вводишь, например:
# iptables -nv -L FORWARD --- здесь вместо FORWARD можно имя любой цепочки ставить.
получаешь:

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

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 chain170_in  all  --  *      *       0.0.0.0/0            192.168.100.170
    0     0 chain170_out  all  --  *      *       192.168.100.170      0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

первые два столбца - счетчики пакетов и пролетевших байт, у меня получились нули, так как форвард сейчас не работает.

вот на живом роутере содрал :)

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

$ iptables -nv -L chain76_in
Chain chain76_in (1 references)
 pkts bytes target     prot opt in     out     source               destination
    3   127 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0


Показания счетчиков можно просто выдрать из вывода iptables средствами шелла, ну а дальше - использовать как угодно..
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: Обсуждение способов подсчета траффика.

Сообщение expdot »

O_O правило iptables на каждого пользователя?
не рационально
на вскидку не вспомню, но где то в /proc можно выудить информацию о количестве принятых/переданных данных на каждый хост
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Обсуждение способов подсчета траффика.

Сообщение Alex2ndr »

expdot писал(а):
03.02.2010 12:03
O_O правило iptables на каждого пользователя?
не рационально
на вскидку не вспомню, но где то в /proc можно выудить информацию о количестве принятых/переданных данных на каждый хост

Что-то я не припомню такого - вот на каждый интерфейс пожалуйста - /proc/net/dev
или таблицу текущих соединений - /proc/net/ip_conntrack
Спасибо сказали:
smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Обсуждение способов подсчета траффика.

Сообщение smaharbA »

Rommel.ua - считается и в "не серверной ОС" абсолютно штатным механизмом
Я конечно далек от мысли...(с)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Обсуждение способов подсчета траффика.

Сообщение eddy »

Замучавшись с sarg'ом и free-sa, я решил сделать "проверялку". Буду рад, если кому-нибудь окажется полезной.
Работает, но возможны какие-то скрытые баги (пока, правда, ничего не всплывало).

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

parsesquid -h
Использование:
parsesquid [Ключи]
Выдает информацию о трафике, полученном извне и из кеша прокси
    -h    --help            Это сообщение
    -f    --from ДАТА        Указать дату, с которой необходимо начать подсчет
    -t    --to ДАТА        Указать дату, на которой необходимо закончить подсчет
Формат даты: Д/М/Г-ч:м, Д/М/Г, ч:м, Д/М, М

Например, чтобы узнать, сколько трафика вы "скушали" с начала марта, пишем:
parsesquid -f 1/3
или еще проще:
parsesquid -f 3

Исходник (приветствуется здравая критика):

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>
#include <time.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

#define CACHE_FILE    "/tmp/.parsesquid_cache"
#define LOG_FILE    "/var/log/squid/access.log"
#define TIME_INTERVAL 25000

#define NEW        0
#define UPDATE    1

struct {
    int time;
    long offset;
} s_cache;

void help(const char* name){
    printf("\nИспользование:\n%s [Ключи]\nВыдает информацию о трафике, полученном извне и из кеша прокси\n", name);
    printf("\t-h\t--help\t\t\tЭто сообщение\n");
    printf("\t-f\t--from ДАТА\t\tУказать дату, с которой необходимо начать подсчет\n");
    printf("\t-t\t--to ДАТА\t\tУказать дату, на которой необходимо закончить подсчет\n");
    printf("\nФормат даты: Д/М/Г-ч:м, Д/М/Г, ч:м, Д/М, М\n\n");
    exit(0);
}

int get_date(char *line){
    time_t date;
    struct tm time_, time_now;
    time(&date);
    time_now = *localtime(&date);
    time_.tm_sec = 0;
    if(sscanf(line, "%d/%d/%d-%d:%d", &time_.tm_mday, &time_.tm_mon, &time_.tm_year,
        &time_.tm_hour, &time_.tm_min) == 5){time_.tm_mon -= 1;}
    else if(!strchr(line, ':') && sscanf(line, "%d/%d/%d", &time_.tm_mday, &time_.tm_mon, &time_.tm_year) == 3){
        date = -1; time_.tm_mon -= 1;}
    else if(!strchr(line, ':') && sscanf(line, "%d/%d", &time_.tm_mday, &time_.tm_mon) == 2){
        date = -1; time_.tm_mon -= 1; time_.tm_year = time_now.tm_year;}
    else if(sscanf(line, "%d:%d", &time_.tm_hour, &time_.tm_min) == 2){
        time_.tm_year = time_now.tm_year; time_.tm_mon = time_now.tm_mon;
        time_.tm_mday = time_now.tm_mday;}
    else if(!strchr(line, ':') && !strchr(line, '/') && !strchr(line, '.') && !strchr(line, '-')
            && sscanf(line, "%d", &time_.tm_mon) == 1){
        date = -1; time_.tm_mon -= 1; time_.tm_year = time_now.tm_year;
        time_.tm_mday = 1;}
    else{
        printf("\nНеверный формат времени!\n");
        printf("Форматы: D/M/Y-hh:mm, D/M/Y, hh:mm, D/M, M\n");
        exit(1);
    }
    if(date == -1){
        time_.tm_hour = 0;
        time_.tm_min = 0;
    }
    if(time_.tm_mon > 11 || time_.tm_mon < 0){
        printf("\nМесяц вне диапазона 1..12\n");
        exit(2);
    }
    if(time_.tm_mday > 31 || time_.tm_mday < 1){
        printf("\nЧисло месяца вне диапазона 1..31, %d\n", time_.tm_mday);
        exit(3);
    }
    if(time_.tm_year > 1900) time_.tm_year -= 1900;
    else if(time_.tm_year > -1 && time_.tm_year < 100) time_.tm_year += 100;
    else if(time_.tm_year < 0 || time_.tm_year > 200){
        printf("\nНеверный формат года %d\n", time_.tm_year);
        exit(4);
    }
    if(time_.tm_hour > 23 || time_.tm_hour < 0){
        printf("\nВремя вне диапазона 0..23 часа\n");
        exit(5);
    }
    if(time_.tm_min > 59 || time_.tm_min < 0){
        printf("\nВремя вне диапазона 0..59 минут\n");
        exit(6);
    }
    date = mktime(&time_);
#ifdef DEBUG
    printf("date: %d\n", date);
#endif
    return (int)date;
}

void makecache(unsigned char flag){
    int cache = open(CACHE_FILE, O_CREAT|O_RDWR, 00644);
    long offset = 0;
    int tmp = 0;
    if(cache < 0){
        printf("\nНе могу создать кеш-файл\n");
        exit(7);
    }
    if(flag == UPDATE){
        if((tmp = lseek(cache, -sizeof(s_cache), SEEK_END)) > 0){
            if(read(cache, &s_cache, sizeof(s_cache)) > 0){
                offset = s_cache.offset;
            }
        }
    }
    size_t len = 0;
    char *string = NULL;
    struct stat filestat;
    FILE *log = fopen(LOG_FILE, "r");
    if(!log){
        printf("\nНе могу открыть " LOG_FILE " \n");
        exit(8);
    }
    printf("\nСоздаю кеш\n");
    if(stat(LOG_FILE, &filestat) != 0){
        printf("\nОшибка, " LOG_FILE ": не могу сделать stat\n");
        exit(10);
    }
    if(fseek(log, offset, SEEK_SET) != 0){
        printf("\nВнимание: " LOG_FILE " устарел, обновляю кеш полностью\n");
        offset = 0;
    }
    s_cache.offset = offset;
    if(getline(&string, &len, log) < 1){
        printf("\nОшибка: " LOG_FILE "пуст\n");
        exit(9);
    }
    long dataportion = filestat.st_size / 100;
    int indpos = 1;
    int frac = 0;
    if(offset > 0) frac = atoi(string) / TIME_INTERVAL;
    do{

        if( ( tmp = ((s_cache.time = atoi(string)) / TIME_INTERVAL)) != frac ){
            write(cache, &s_cache, sizeof(s_cache));
#ifdef DEBUG
            printf("очередная строка, время: %d, смещение: %d\n", s_cache.time, s_cache.offset);
#endif
            frac = tmp;
        }
        s_cache.offset = ftell(log);
        if( (tmp = s_cache.offset / dataportion) > indpos ){
            if( (tmp % 10) == 0) printf(" %d%% ", tmp);
            else printf(".");
            indpos = tmp;
            fflush(stdout);
        }
    } while(getline(&string, &len, log) > 0);
    printf("\nГотово!\n");
    free(string);
    close(cache);
    fclose(log);
}

int count_bytes(from_offset, to_offset, from_date, to_date){
    long dataportion = (to_offset - from_offset) / 100;
    long long bytes_from_outside = 0, bytes_from_cache = 0, curpos;
    char* string = NULL, *ptr;
    size_t len = 0;
    int time, indpos = 0, tmp, bytes;
    FILE *log = fopen(LOG_FILE, "r");
    fseek(log, from_offset, SEEK_SET);
    while(getline(&string, &len, log) > 0){
        time = atoi(string);
        curpos = ftell(log) - from_offset;
        if( (tmp = curpos / dataportion) > indpos){
            if( (tmp % 10) == 0) printf(" %d%% ", tmp);
            else printf(".");
            indpos = tmp;
            fflush(stdout);
        }
        if(time < from_date) continue;
        else if(time > to_date) break;
        sscanf(string, "%*s %*s %*s %*s %d",  &bytes);
        if(strstr(string, "NONE")) bytes_from_cache += bytes;
        else bytes_from_outside += bytes;
    }
    printf("\nПолучено информации\n\t\tиз мира: %lld байт (%.2f МБ);\n\t\tиз кэша: %lld байт (%.2f МБ)\n",
        bytes_from_outside, (double)bytes_from_outside/1024./1024., bytes_from_cache,
            (double)bytes_from_cache/1024./1024.);
    free(string);
    fclose(log);
    return(time);
}

int main(int argc, char** argv){
    int from_date = 0, to_date = INT_MAX, last_cache_time, last_log_time;
    struct stat filestat;
    char* const short_options = "hf:t:u";
    struct option long_options[] = {
        { "help",    0,    NULL,    'h'},
        { "from",    1,    NULL,    'f'},
        { "to",        1,    NULL,    't'},
        { "update",    0,    NULL,    'u'},
        { NULL,        0,    NULL,    0  }
    };
    int next_option;
    do{
        next_option = getopt_long(argc, argv, short_options, long_options, NULL);
        switch(next_option){
            case 'h': help(argv[0]);
            break;
            case 'f': from_date = get_date((char*)optarg);
            break;
            case 't': to_date = get_date((char*)optarg);
            break;
            case 'u': makecache(UPDATE); exit(0);
            break;
        }
    }while(next_option != -1);
    if(stat(CACHE_FILE, &filestat) != 0) makecache(NEW);
    else if(filestat.st_size == 0) makecache(NEW);
    int cache = open(CACHE_FILE, O_RDONLY);
    size_t bytes_read;
    unsigned char find_from = 1;
    long from_offset = 0, to_offset = 0;
    bytes_read = read(cache, &s_cache, sizeof(s_cache));
    while(bytes_read == sizeof(s_cache)){
#ifdef DEBUG
            printf("\nfrom=%d\n",s_cache.offset);
#endif
        if( (last_cache_time = s_cache.time) >= from_date && find_from){
            find_from = 0;
            from_offset = s_cache.offset;
        }
        else if(s_cache.time >= to_date)
            to_offset = s_cache.offset;
        bytes_read = read(cache, &s_cache, sizeof(s_cache));
    }
    close(cache);
    if(find_from){
        printf("\nНачальная дата поиска старше последней записи логов\n");
        exit(11);
    }
    if(to_offset == 0){
        stat(LOG_FILE, &filestat);
        to_offset = filestat.st_size;
    }
    if(to_offset <= from_offset){
        printf("\nНеверно выбраны начало и конец диапазона дат,\n"
            "\tлибо сведения за указанный период отсутствуют\n");
            exit(12);
    }
    printf("\nПровожу подсчет (от %d до %d)\n", from_offset, to_offset);
    printf("\n====================================================================\n");
    last_log_time = count_bytes(from_offset, to_offset, from_date, to_date);
    printf("\n====================================================================\n");
    if(last_log_time - last_cache_time > TIME_INTERVAL){
        printf("\nЗаписи файла кеша устарели. Обновляю...\n");
        makecache(UPDATE);
    }
    exit(0);
}
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Обсуждение способов подсчета траффика.

Сообщение eddy »

Да, забыл добавить - в заголовке первые три define'а лучше поменять на

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

#ifndef CACHE_FILE
#define CACHE_FILE    "/tmp/.parsesquid_cache"
#endif
#ifndef LOG_FILE
#define LOG_FILE    "/var/log/squid/access.log"
#endif
#ifndef TIME_INTERVAL
#define TIME_INTERVAL 25000
#endif

Тогда эти параметры можно будет менять при компиляции через -D...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian

Re: Обсуждение способов подсчета траффика.

Сообщение technotrance »

Всем доброго времени суток в этой теме!
Недавно поставил себе нетамс, настроил, вроде, правильно, трафик считает. Но есть кой-какая проблема подсчёта ФТП-трафика. Его он не может зафиксировать... К прмеру, скачиваю файл в несколько мегабайт, а в статистике появляется всего пара-тройка килобайт :(
Я думаю, проблема в том, что протокол ФТП работает не по одному порту, а (как бы это сказать...) разбегается по динамическим портам... Вначале, я хотел поставить какой-нить фтп-прокси и следить за трафиком через него. Попробовал frox и jftpgw -- ни тот ни другой работать не захотели.
Поэтому, я хотел бы посоветоваться с бывалыми людьми о том, кто как у себя ведёт статистику ФТП трафика.
А еслиб кто-нибдь подсказал, как у его это получилось сделать через netams, то было б вообще замечательно! :)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Обсуждение способов подсчета траффика.

Сообщение eddy »

technotrance писал(а):
19.04.2010 09:59
кто как у себя ведёт статистику ФТП трафика.

squid'ом, естественно :), как и весь остальной трафик.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian

Re: Обсуждение способов подсчета траффика.

Сообщение technotrance »

А через сквид разве можно полноценно работать с ФТП? (копировать, удалять и прочее...)
Да и как весь остальной то? Я хочу вести статистику абсолютно всего трафика: FTP, ICQ, Jabber, POP3, SMTP...
Сквид то у меня настроен и работает + к нему прикручен sams. Но это мне позволяет отслеживать лишь http и https трафик... FTP-трафик через сквид, конечно, тоже проходит, если ты, к примеру, ткнул ссылку "скачать" на каком-либо сайте... Однако, если же полноцено работать с ФТП сервером (например, если я тупо хочу примонтировать фтп-ресурс к себе в виде какой-нить рабочей папки), то тут через сквид это не получится сделать. Приходится на iptables настраивать SNAT.
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: Обсуждение способов подсчета траффика.

Сообщение patrius »

technotrance писал(а):
19.04.2010 09:59
Всем доброго времени суток в этой теме!
Недавно поставил себе нетамс, настроил, вроде, правильно, трафик считает. Но есть кой-какая проблема подсчёта ФТП-трафика. Его он не может зафиксировать... К прмеру, скачиваю файл в несколько мегабайт, а в статистике появляется всего пара-тройка килобайт :(
Я думаю, проблема в том, что протокол ФТП работает не по одному порту, а (как бы это сказать...) разбегается по динамическим портам... Вначале, я хотел поставить какой-нить фтп-прокси и следить за трафиком через него. Попробовал frox и jftpgw -- ни тот ни другой работать не захотели.
Поэтому, я хотел бы посоветоваться с бывалыми людьми о том, кто как у себя ведёт статистику ФТП трафика.
А еслиб кто-нибдь подсказал, как у его это получилось сделать через netams, то было б вообще замечательно! :)


а проблема при обращении к внутреннему или наружному (относительно счетчика) FTP?
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian

Re: Обсуждение способов подсчета траффика.

Сообщение technotrance »

К наружному. Когда с какой-нить рабочей станции скачиваешь что-нибудь с фтп-сервера стороннего.
Своего внутреннего фтп-сервера у меня пока нету.
Спасибо сказали:
tolyanopel
Сообщения: 1

Re: Обсуждение способов подсчета траффика.

Сообщение tolyanopel »

Есть сервер на убунте, который раздает интернет для локалки. На нем стоит squid.
Нужно смотреть в реалтайме кто куда лазит и сколько забирает канала.
Проблема в том, что на том же сервере живет файлохранилище и при просмотре, например, с помощью iptraff или iftop все в одной куче - и трафик внутри, и трафик из интернета.
Чем можно смотреть куда в интернете лазят пользователи из локалки, кроме как написать собственный скрипт?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Обсуждение способов подсчета траффика.

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

tolyanopel
$ apt-cache search squid analys

awffull - web server log analysis program
sarg - squid analysis report generator
squidview - monitors and analyses squid access.log files
srg - Fast, Flexible and Detailed log analysis for the Squid Proxy
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
leksstav
Сообщения: 331

Re: Обсуждение способов подсчета траффика.

Сообщение leksstav »

technotrance писал(а):
19.04.2010 14:40
А через сквид разве можно полноценно работать с ФТП? (копировать, удалять и прочее...)
Да и как весь остальной то? Я хочу вести статистику абсолютно всего трафика: FTP, ICQ, Jabber, POP3, SMTP...
Сквид то у меня настроен и работает + к нему прикручен sams. Но это мне позволяет отслеживать лишь http и https трафик... FTP-трафик через сквид, конечно, тоже проходит, если ты, к примеру, ткнул ссылку "скачать" на каком-либо сайте... Однако, если же полноцено работать с ФТП сервером (например, если я тупо хочу примонтировать фтп-ресурс к себе в виде какой-нить рабочей папки), то тут через сквид это не получится сделать. Приходится на iptables настраивать SNAT.



Чем вас не устраивает связка netacct-mysql + squid в режиме прозрачного проксирования ???
netacct-mysql будет вам считать траф по всем портам абсолютно, а squid для начальства выводить красивую статистику кто и куда ходил и что качал.
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian

Re: Обсуждение способов подсчета траффика.

Сообщение technotrance »

Прозрачное проксирование не подходит. Дело в том, что у нас требуется, чтоб у каждого человека была квота на трафик + ограничение (или наоборот допуск) к тем или иным интернет-ресурсам. А про netacct-mysql не слышал, щас почитаю, что за программа...
Спасибо сказали:
Аватара пользователя
technotrance
Сообщения: 280
ОС: Fedora, FreeBSD, CentOS, Debian

Re: Обсуждение способов подсчета траффика.

Сообщение technotrance »

Почитал. Если я правильно понял, то она работает по тому же принципу, что и netams... Netams у меня трафик по всем портам абсолютно тоже считает. Причём, также, отдельно считает и ICQ трафик, который идёт по порту 5190, и POP трафик, и SMTP трафик и VPN трафик -- с этим всё в порядке, поскоку эти сервисы работают по конкретным портам. А вот ФТП трафик использует множество портов, и вот в этом то как раз делема и встала как его отследить...
Пробовал настроить, чтоб он мониторился по портам 21 и 49152:65534. Однако, с такой настройкой netams почему-то посчитал за ftp-трафик файл, скачанный с микрософта по http ссылке (200 с чем-то мегабайт). Причём, эти 200 мег отразились как в http-трафике (как оно и есть на самом деле), так и в ftp-трафике, что для меня пока так и остаётся непонятным.
Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Обсуждение способов подсчета траффика.

Сообщение tierpunk »

Привет всем, прочитал всё тему, но так и не нашёл ответа на свой вопрос.

Есть больше 100 активных клиентов.
Выход в инет 190мбит по гигабитному каналу от провайдера.
Все получают IP по DHCP привязанный к МАК адресу.
Сейчас белый IP мапяться к серым, но при смене виндового траффик инсперктара на любимую ОС, всё будет через proxy_arp.
Белый IP будут раздаваться тоже по DHCP с привязкой к МАК адресу.

Ищу открытый бесплатный готовый вариант.

Что от него нужно:

Нужно всех по считать, и очень, очень желательно посчитать точно, без потерь трафика.
Нужен шейпинг трафика.
Нужен прозрачный прокси.
Нужен proxy_arp.
Нужен DHCP с привязкой к МАК.

Если я раскатал губу, и идти мне с такими требованиями на юх. То чем лучше считать трафик, fprobe ? nfdump ? есть что то ище чего я не знаю?

Все клиенты подключены через хорошие обычные свичи не управляемые.
Любимая ОС убунту/debian
Если надо поставлю и openbsd лишь бы все было как надо.
Спасибо за то что ответили на моё сообщение.
Спасибо сказали: