HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 21.01.2009, 21:25
xismyname
Познающий
Регистрация: 07.09.2008
Сообщений: 79
С нами: 9302336

Репутация: 10
По умолчанию

Цитата:
Сообщение от WON  
Чесно говря я не пытался казаться "заумным", просто в той ссылке что ты мне дал говорилось что есть готовые WinAPI функции и что с ними легче рабаотать... Спасибо... буду разбираться с тем кодом что есть...
Мужик тебе функция accept() не нужна для перехвата пакетов, по той ссылке что скинул Criz все понятно показано,вот одна проблема - тот код не работает на некоторых Windows .

Если ты хочешь принимать только те пакету которые предназначены для твоей машины то переводит сокет в режим promisc тебе незачем.

Вот код,для перехвата пакетов предназначенных для твоего компа.

Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <mstcpip.h>
#include <conio.h>

typedef struct{
	unsigned int version 	: 4;
	unsigned int h_len   	: 4;
	unsigned int tos     	: 8;
	unsigned int tot_len 	: 16;
	unsigned int ID      	: 16;
	unsigned int flags   	: 3;
	unsigned int f_offset	: 13;
	unsigned int TTL        : 8;
	unsigned int protocol   : 8;
	unsigned int h_checksum : 16;
	unsigned int srcip      : 32;
	unsigned int dstip      : 32;
}IPHEADER;

int main(void)
{
	SOCKADDR_IN      addr;
	WSADATA          wsd;
	SOCKET           mSocket;
	HOSTENT          *host;
	IPHEADER         *ip;
	unsigned long    mode = 1;
	int              len;
	char             pcname[32];
	char             buf[sizeof(IPHEADER)];


	/* load windows socket interface */
	if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
	{
		puts("Could not load winsocket api");
		exit(1);
	}

	/* Get computer name */
	len = sizeof(pcname) - 1;
	GetComputerNameA(pcname,&len);
	len = 0;

	/* Get host IP address by name */
	host = gethostbyname(pcname);

	/* Set addr & buf to 0 */
	memset(&addr,0,sizeof(addr));
	memset(buf,0,sizeof(buf));

	/* init. local address & create raw socket */
	addr.sin_addr.s_addr    = ((struct in_addr*)host->h_addr_list[0])->s_addr;
        addr.sin_family         = AF_INET;
	addr.sin_port           = htons(0);
	mSocket                 = socket(AF_INET,SOCK_RAW,IPPROTO_IP);

	if(mSocket == INVALID_SOCKET)
	{
		puts("Could not create a RAW socket");
		exit(1);
	}

	/* Bind socket with local address */
	if(bind(mSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR)) != -1)
	{
		/*-----------------------------------------------*/
		int x = 1;
		while(!kbhit())
		{
			len = recv(mSocket,buf,sizeof(buf),0);

			/* Check received data */
			if(len >= sizeof(IPHEADER))
			{
				ip = (IPHEADER*)buf;
				printf("\n+--------- %d ------------+\n",x++);

				printf("| DEST    : %s\n",inet_ntoa(*((struct in_addr*)&ip->dstip)));
				printf("| SRC     : %s\n",inet_ntoa(*((struct in_addr*)&ip->srcip)));
				printf("| VERSION : %d\n",ip->version);

				printf("+------------------------+\n");

			}
		}
	}
	else
	{
		puts("Could not bind");
	}
}
 
Ответить с цитированием

  #12  
Старый 21.01.2009, 23:24
WON
Новичок
Регистрация: 02.07.2008
Сообщений: 17
С нами: 9399094

Репутация: 8
По умолчанию

xismyname а на чём ты компилируешь...? Я на VS 6.0, подключаю
#pragma comment( lib, "wsock32.lib" ) и у меня выскакиевает 60 error(s), 19 warning(s) непонятного содержания...
 
Ответить с цитированием

  #13  
Старый 22.01.2009, 00:23
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
С нами: 9746420

Репутация: 119
По умолчанию

Пробуй так:
Цитата:
#pragma comment(lib, "ws2_32.lib")
 
Ответить с цитированием

  #14  
Старый 22.01.2009, 01:10
Chaak
Познавший АНТИЧАТ
Регистрация: 01.06.2008
Сообщений: 1,047
С нами: 9443906

Репутация: 3313


По умолчанию

windows.h подключай после winsock2, а не наоборот
 
Ответить с цитированием

  #15  
Старый 22.01.2009, 20:44
xismyname
Познающий
Регистрация: 07.09.2008
Сообщений: 79
С нами: 9302336

Репутация: 10
По умолчанию

Цитата:
Сообщение от WON  
xismyname а на чём ты компилируешь...? Я на VS 6.0, подключаю
#pragma comment( lib, "wsock32.lib" ) и у меня выскакиевает 60 error(s), 19 warning(s) непонятного содержания...

В Lcc-win32.

Если выдает ошибку убери файлы mstcpip.h и ws2tcpip.h.

Последний раз редактировалось xismyname; 22.01.2009 в 20:47..
 
Ответить с цитированием

  #16  
Старый 25.01.2009, 12:18
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
С нами: 10943066

Репутация: 1236


По умолчанию

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


snow white world wide
 
Ответить с цитированием

  #17  
Старый 07.02.2009, 01:12
WON
Новичок
Регистрация: 02.07.2008
Сообщений: 17
С нами: 9399094

Репутация: 8
По умолчанию

Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <winsock2.h>
#include <windows.h>
#include <conio.h>

#pragma comment(lib, "ws2_32.lib")  

typedef struct{
	unsigned int version 	: 4;
	unsigned int h_len   	: 4;
	unsigned int tos     	: 8;
	unsigned int tot_len 	: 16;
	unsigned int ID      	: 16;
	unsigned int flags   	: 3;
	unsigned int f_offset	: 13;
	unsigned int TTL        : 8;
	unsigned int protocol   : 8;
	unsigned int h_checksum : 16;
	unsigned int srcip      : 32;
	unsigned int dstip      : 32;
}IPHEADER;

int main(void)
{
	SOCKADDR_IN      addr;
	WSADATA          wsd;
	SOCKET           mSocket;
	HOSTENT          *host;
	IPHEADER         *ip;
	unsigned long    mode = 1;
	int              len;
	char             pcname[32];
	char             buf[sizeof(IPHEADER)];


	/* load windows socket interface */
	if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
	{
		puts("Could not load winsocket api");
		exit(1);
	}

	/* Get computer name */
	len = sizeof(pcname) - 1;
	GetComputerNameA(pcname, (unsigned long *)len);
	len = 0;

	/* Get host IP address by name */
	host = gethostbyname(pcname);

	/* Set addr & buf to 0 */
	memset(&addr,0,sizeof(addr));
	memset(buf,0,sizeof(buf));

	/* init. local address & create raw socket */
	addr.sin_addr.s_addr    = ((struct in_addr*)host->h_addr_list[0])->s_addr;
        addr.sin_family         = AF_INET;
	addr.sin_port           = htons(0);
	mSocket                 = socket(AF_INET,SOCK_RAW,IPPROTO_IP);

	if(mSocket == INVALID_SOCKET)
	{
		puts("Could not create a RAW socket");
		exit(1);
	}

	/* Bind socket with local address */
	if(bind(mSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR)) != -1)
	{
		/*-----------------------------------------------*/
		int x = 1;
		while(!kbhit())
		{
			len = recv(mSocket,buf,sizeof(buf),0);

			/* Check received data */
			if(len >= sizeof(IPHEADER))
			{
				ip = (IPHEADER*)buf;
				printf("\n+--------- %d ------------+\n",x++);

				printf("| DEST    : %s\n",inet_ntoa(*((struct in_addr*)ip->dstip)));
				printf("| SRC     : %s\n",inet_ntoa(*((struct in_addr*)ip->srcip)));
				printf("| VERSION : %d\n",ip->version);

				printf("+------------------------+\n");

			}
		}
	}
	else
	{
		puts("Could not bind");
	}
	return 0;
}
Зделал всё как сказали.. клмпилиться но сразу же выскакивает ошибка "Инструкция по адресу ... обратилась к памяти... и не может быть прочитана...

Ошибка в строке
Код:
GetComputerNameA(pcname, (unsigned long *)len);
Может подскажете как исправить?

Последний раз редактировалось WON; 07.02.2009 в 01:14..
 
Ответить с цитированием

  #18  
Старый 07.02.2009, 02:03
__mad
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
С нами: 9745696

Репутация: 104
По умолчанию

GetComputerNameA(pcname, &len);
 
Ответить с цитированием

  #19  
Старый 07.02.2009, 12:50
WON
Новичок
Регистрация: 02.07.2008
Сообщений: 17
С нами: 9399094

Репутация: 8
По умолчанию

Код:
GetComputerNameA(pcname, &len);
я тоже об этом думал но оно выдаёт ошибку несоответствия типов поэтому я написал так:

Код:
GetComputerNameA(pcname, (unsigned long *)&len);
программа запускаеться, ошибку не выкидывает но и программа ничего не делает.. показывает красивый чёрный прямоугольник...

Последний раз редактировалось WON; 07.02.2009 в 14:11..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват данных: кто, где и как И.Г. Мировые новости. Обсуждения. 0 03.12.2006 22:46
Атака на VoIP: перехват novichok "Железо" 0 24.04.2006 15:30



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.