Показать сообщение отдельно

Перехват пакетов
  #1  
Старый 19.01.2009, 22:31
WON
Новичок
Регистрация: 02.07.2008
Сообщений: 17
С нами: 9399094

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

Решил написать программку для пеерхвата пакетов только для моего компьютера, для начала хотя бы читать их содержимое...
Начал писать на С++, но прога не очень то и работает... Непонятно когда и по каким принцыпам(лично для меня так) она выводит содержимое пакетов(и то не всё)... Может мне ктонибудь подскажет аглоритм и программые методы для осуществение моей цели...

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

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

int main()
{
	WSADATA wd;
	char buff[1000];
	SOCKET s, news;
	sockaddr_in sin, newsin;

	sin.sin_family = AF_INET;
	sin.sin_port = htons(2593);
	sin.sin_addr.s_addr = inet_addr("127.0.0.1");
	
	if(FAILED(WSAStartup( MAKEWORD(2,2), &wd)) )
	{
		cout<<"WSA error - "<<WSAGetLastError()<<endl;
		return -1;
	}

	if( (s=socket(AF_INET,SOCK_STREAM,0)) == -1 )
	{
		cout<<"WSA error - "<<WSAGetLastError()<<endl;
		return -1;
	}

     if(bind(s, (sockaddr*)&sin, sizeof(sin) ) == -1 )
     {
          cout<<"Can't bind"<<endl;
          return -1;
     }

	cout<<"Wait for connections..."<<endl;
	int i=0, len = sizeof(newsin);
	if(listen(s,5) == -1)
	{
		cout<<"Cant listen"<<endl;
	}
	int c = 0, tmp;
	while( c < 1 )
	{
		if( (news = accept(s, (sockaddr*)&newsin, &len)) == INVALID_SOCKET )
		{
			cout<<"Accept failed"<<endl;
			getch();
			return -1;
		}
		else
		{
			cout<<"New client "<<c<<endl;
			int msg;
			if(FAILED(msg = recv(news, buff, sizeof(buff),0 )))
				return E_FAIL;
			for(int i = 0; i < 1000; i++)
				if( isalnum(buff[i]) )
					cout<<buff[i];
			cout<<endl;
			//closesocket(news);
			++c;
		}
	}

		tmp = recv(news,buff, sizeof(buff),0 );
		if( tmp != SOCKET_ERROR )
			for(int i = 0; i < 1000; i++)
				if( isalnum(buff[i]) )
					cout<<buff[i];
		tmp = recv(news,buff, sizeof(buff),0 );
		if( tmp != SOCKET_ERROR )
			for(int i = 0; i < 1000; i++)
				if( isalnum(buff[i]) )
					cout<<buff[i];

	closesocket(s);
	closesocket(news);
	WSACleanup();

	return 0;
}
Код как я сам понимаю - бред...
 
Ответить с цитированием