The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Несколько вопросов по учету траффика"
Отправлено dimus, 30-Май-05 08:45 
Для решения задачи учета траффика возможно несколько путей. В любом случае нам надо этот траффик откуда-то снять. В принципе, эта задача не представляет собой большой сложности и может быть решена различными путями. Далее с содержимым заголовков пакетов необходимо произвести действия по выделению полезной информации и ее дальнейшей записи в систему сбора статистики. Хотелось бы более подробно обсудить со знающими людьми ряд тонких моментов. Для более конкретного разговора будем считать, что целевая платформа - линукс, хотя я с удовольствием прочитаю и про другие платформы.

1. Съем траффика
Я создал пакетный сокет, который прикручиваю к обрабатываемому интерфейсу. Сокет перехватывает весь пакет, начиная с заголовка ethernet. Для этого я использовал вызов recv_from, и это прекрасно работает, НО! Вызов не завершается, пока не будет перехвачен хоть один пакет. А мне хотелось бы иметь примерно такую структуру для этой части программы:

flag = 1;
while( flag )
{
     if( проверить_есть_ли_данные_в сокете() )
     {
          считать_данные_из_сокета();
     }
    
     if( пора_сбросить_данные() )
     {
          сбросить_данные();
     }

     if( пора_завершить_работу() )
     {
          flag = 0;
     }
}

для реализации подобной схемы мне надо как-то узнать, есть ли данные в сокете, причем сделать это таким образом, чтобы функция не ждала эти данные вечность. Я почитал маны и нарыл, что похоже мне смогут помочь
функции select или poll. Вопросы: это единственный вариант или есть еще какие-либо возможности? Правильно ли я вообще понял возможность использования в данном случае этих функций? И какая из функций лучше - select или poll? Какие подводные камни есть в использовании этих функций?

2. Логирование траффика
В принципе можно писать в лог информацию по каждому пакету, либо каким-либо образом группировать информацию, а потом сбрасывать в лог уже получившуюся выжимку. У каждого варианта есть свои плюсы и минусы, но мне лично больше нравится второй вариант. Хотелось бы узнать, как это делается в других программах учета траффика, и как это делается в железках.

3. Разделение траффика на свой и чужой.
По какому принципу системы учета траффика делят пакеты? Если провайдер присылает мне счет за 1Гиг, то что входит в этот гиг - только данные пакетов или и их заголовки? И если входят заголовки, то до какого уровня.
Я решил, что не должны учитываться заголовки канального уровня, но должны сетевого -  насколько это правильно?
---------------------------------------------------------------
ethhdr | ip header | data                                     |
---------------------------------------------------------------
  ^         ^
  |         |
  |          ------ платит клиент
   ------------ Плачу я

Заранее спасибо за ваши ответы.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру