Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 22:56   #1
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию Сниффер. Учет исходящего трафика.

Суть в следующем... На основе rsdn.ru пишу сниффер.
Код из статьи:
Код:
#include <conio.h>
#include <winsock2.h>

#define MAX_PACKET_SIZE    0x10000
// Буфер для приёма данных
static BYTE Buffer[MAX_PACKET_SIZE]; // 64 Kb

void main()
{
  WSADATA     wsadata;   // Инициализация WinSock.
  SOCKET      s;         // Cлущающий сокет.
  char        name[128]; // Имя хоста (компьютера).
  HOSTENT*    phe;       // Информация о хосте.
  SOCKADDR_IN sa;        // Адрес хоста
  long        flag = 1;  // Флаг PROMISC Вкл/выкл.

  // инициализация
  WSAStartup(MAKEWORD(2,2), &wsadata);
  s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
  gethostname(name, sizeof(name));
  phe = gethostbyname( name );
  ZeroMemory( &sa, sizeof(sa) );
  sa.sin_family = AF_INET;
  sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
  bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
  
  // Включение promiscuous mode.
  ioctlsocket(s, SIO_RCVALL, &flag);

  // Приём IP-пакетов.
  while( !_kbhit() )
  {
    int count;
    count = recv( s, Buffer, sizeof(Buffer), 0 );
    // обработка IP-пакета
    if( count >= sizeof(IPHeader) )
    {
      IPHeader* hdr = (IPHeader *)Buffer;
      //что-то делаем с пакетом...
    }
  }
  // Конец работы.
  closesocket( s );
  WSACleanup();
}
Со вх. трафикам все отлично, а как быть с исх.? Я так понимаю данный код не расчитан отлавливать исх. пакеты. Хотя ioctlsocket(s, SIO_RCVALL, &flag); говорит о отлавливании всех пакетов.

Что на это скажете? Я в чем то ошибаюсь?
Игорь007 вне форума Ответить с цитированием
Старый 13.04.2009, 23:17   #2
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

В общем ясно. Придется копать...
Короче разберусь - отпишу. Может кому интересно будет.

В принципе задача стоит в подсчете вх и исх трафика. Зная размеры вх. покетов можно найти вх. трафик. Тоже самое и с исх. Или может есть другие подходы?

Последний раз редактировалось Игорь007; 13.04.2009 в 23:56.
Игорь007 вне форума Ответить с цитированием
Старый 02.05.2009, 01:23   #3
Zen
Новичок
Джуниор
 
Регистрация: 02.05.2009
Сообщений: 1
По умолчанию

Привет! Такая же проблема. Данный код не работает на некоторых компах. Программа не видит исходящие пакеты. В чём проблема пока не выявил((. Отпиши если разобрался.
Zen вне форума Ответить с цитированием
Старый 18.11.2011, 18:34   #4
Ermito
Новичок
Джуниор
 
Регистрация: 18.11.2011
Сообщений: 1
По умолчанию

уу.. некропост..
Если я правильно понимаю, если hdr->dest == ip этого компьютера, то пакет входящий, а если hdr->src == ip, то пакет исходящий.. у меня приведенный код ловит оба типа пакетов
Ermito вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UDP сниффер XAOC-forever Работа с сетью в Delphi 3 11.07.2011 22:14
БД в Delphi, учет регистра elsin БД в Delphi 7 09.10.2008 02:25
Учет платежей yourself Microsoft Office Excel 5 16.04.2008 07:39
Сниффер порта keng00r00 Работа с сетью в Delphi 1 22.04.2007 08:53
Учет Траффика Stakanosid Работа с сетью в Delphi 3 15.01.2007 13:51