Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 17.04.2010, 15:09   #1
jhonyxakep
AnyKey`щик
 
Аватар для jhonyxakep
 
Регистрация: 04.04.2009
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Счастье Доработать простенький сниффер

Драв всем....

Имеется код простого сниффера, немного подправленного, но взятого с просторов интернета:

#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>
#include <winsock2.h>

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

using namespace std;

//Структура заголовка IP-пакета

typedef struct IPHeader {
  UCHAR   iph_verlen;   // версия и длина заголовка
  UCHAR   iph_tos;      // тип сервиса
  USHORT  iph_length;   // длина всего пакета
  USHORT  iph_id;       // Идентификация
  USHORT  iph_offset;   // флаги и смещения
  UCHAR   iph_ttl;      // время жизни пакета
  UCHAR   iph_protocol; // протокол
  USHORT  iph_xsum;     // контрольная сумма
  ULONG   iph_src;      // IP-адрес отправителя
  ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;

char src[10];
char dest[10];
char ds[15];
char dso[5];
unsigned short lowbyte;
unsigned short hibyte;

int main()
{
  WSADATA     wsadata;   // Инициализация WinSock.
  SOCKET      s;         // Cлущающий сокет.
  char        name[128]; // Имя хоста (компьютера).
  HOSTENT*    phe;       // Информация о хосте.
  SOCKADDR_IN sa;        // Адрес хоста
  IN_ADDR sa1;        //
  unsigned 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( 0 == 0 )
  {
    int count;
    count = recv( s, Buffer, sizeof(Buffer), 0 );
    // обработка IP-пакета
    if( count >= sizeof(IPHeader) )
    {
      IPHeader* hdr = (IPHeader *)Buffer;
      //Начинаем разбор пакета...

	strcpy(src,"Пакет: ");
	CharToOem(src,dest);
	printf(dest);
	// Преобразуем в понятный вид адрес отправителя.
	printf("From ");
	sa1.s_addr = hdr->iph_src;
	printf(inet_ntoa(sa1));

	// Преобразуем в понятный вид адрес получателя.
	printf(" To ");
	sa1.s_addr = hdr->iph_dest;
	printf(inet_ntoa(sa1));

	// Вычисляем протокол. Полный список этих констант
	// содержится в файле winsock2.h
	printf(" Prot: ");
	if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP "); else
	if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP "); else
	printf("UNKNOWN ");

	// Вычисляем размер. Так как в сети принят прямой порядок
	// байтов, а не обратный, то прийдётся поменять байты местами.
	printf("Size: ");
	lowbyte = hdr->iph_length>>8;
	hibyte = hdr->iph_length<<8;
	hibyte = hibyte + lowbyte;
	printf("%s",itoa(hibyte,ds,10));

	// Вычисляем время жизни пакета.
	printf("%s",itoa(hibyte,ds,10));
	printf(" TTL:%s",itoa(hdr->iph_ttl,ds,10));

   cout << endl;
    }
  }

  closesocket( s );
  WSACleanup();
}
Этот сниффер умеет только получать данные о принятых и отосланых пакетах, но надо научить его работать с самими пакетами, те вычислять их хеш, и тд, и тп. Дело в том что с сетью я раньше до этого не работал, понятия не имею как это делается, буду рад хотя бы направлению куда же копать... А еще лучше кодик...
__________________
Если руки золотые... То не важно откуда они растут!
Black Jack Developer
Black Jack TEam [BJT]
(Offline)
 
Ответить с цитированием
Старый 19.04.2010, 05:23   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Доработать простенький сниффер

jhonyxakep, прости пожалуйста, но для каких целей тебе это нужно?
Не пойми меня неправильно. Мы сейчас тебе расскажем что да как, а ты пойдёшь и наделаешь дел.
Начнёшь снифать всех подряд. Того гляди и в киддисы запишешься.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
Phantom (20.04.2010), Reks888 (19.04.2010)
Старый 13.07.2010, 09:23   #3
jhonyxakep
AnyKey`щик
 
Аватар для jhonyxakep
 
Регистрация: 04.04.2009
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Доработать простенький сниффер

Сообщение от Randomize Посмотреть сообщение
jhonyxakep, прости пожалуйста, но для каких целей тебе это нужно?
Не пойми меня неправильно. Мы сейчас тебе расскажем что да как, а ты пойдёшь и наделаешь дел.
Начнёшь снифать всех подряд. Того гляди и в киддисы запишешься.
Это было надо для анализа пакетов, проходящих на машине пользователя, ради перехвата заразы... Интересно каких дел можно понаделать фонарной прослушкой? Для таких целей я бы взял чтонибудь готовое.

А вообще я просто нашел свою тему в гугле, вот и решил позырить че произошло с ней =)

Кстати мой ник вовсе не взят из соединения двух слов, а из достаточно забавной игры.
__________________
Если руки золотые... То не важно откуда они растут!
Black Jack Developer
Black Jack TEam [BJT]
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:13.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com