Сниффер. Учет исходящего трафика.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Igor007
Сообщения: 9
Зарегистрирован: 09 июн 2008, 09:35
Откуда: 1234
Контактная информация:

Суть в следующем... На основе 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); говорит о отлавливании всех пакетов.

Что на это скажете? Я в чем то ошибаюсь?
--------------------------------------------------------------------------------
Добавленное сообщение
--------------------------------------------------------------------------------
Значит не знаете? Хорошо. Буду копать...
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Так у тебя только слушающий сокет. И в цикле ты делаеш recv(), т.е. только запись от входящего траффика.
Код нужно переделать под объект, а не в мэйне всё писать.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Не о чём не говорит
SOCKADDR_IN sa;
?
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Igor007
Сообщения: 9
Зарегистрирован: 09 июн 2008, 09:35
Откуда: 1234
Контактная информация:

Airhand писал(а):Код нужно переделать под объект, а не в мэйне всё писать.
Код вообще не мой. Это с примера. Так как можно перехватить исх пакеты?
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Начнём с теории: ты прочитал хоть одну книгу по winsock ?
Теория такова: для того, чтобы "ловить" весь трафик, тебе нужно создавать 2 сокета: один для входящего трафика и один - для исходящего. Вот почему я говорю засунуть это всё в объект - чтобы легче было.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Igor007
Сообщения: 9
Зарегистрирован: 09 июн 2008, 09:35
Откуда: 1234
Контактная информация:

Начнём с теории: ты прочитал хоть одну книгу по winsock ?
Согласен. В ближайшее время займусь изучением. Просто срочно понадобилось, но я уже проблему решил. Так что спасибо.
P.S. А что посоветуете почитать?
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

P.S. А что посоветуете почитать?
Я, в своё время, читал какой-то стандарт по winsock 2.0 на английском. На русском не встречал.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Есть неплохая книга на русском языке, называется "Программирование в сетях Microsoft Windows". К ней ещё CD с примерами на С++ прилагается.
Выглядит она так:
http://www.delphimaster.ru/books/978531800725/
Igor007
Сообщения: 9
Зарегистрирован: 09 июн 2008, 09:35
Откуда: 1234
Контактная информация:

Спасибо. Уже читаю.
Ответить