| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Шаг 22 - Первый шаг для хакера, сканирование портов.

Итак, задача нам нужно перебрать все порты. Смотрим код:

#include "stdafx.h"
#include "iostream.h"
#include "fstream.h"
#include "winsock2.h"
#include "iostream.h"

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

void ErrorInfo();

void main()
{	
	ofstream ofs;
	ofs.open("log.txt"); 
	WSADATA wsaData;
	if (WSAStartup(WINSOCK_VERSION, &wsaData)) 
	{
		printf ("winsock not bi initialized !\n");
	
	}
	else 
	{
	u_short  ushTestPort;
	for (ushTestPort=2828;ushTestPort< 65535;ushTestPort++)
		{
		    cout << ushTestPort << endl;  
			SOCKET sock;
			sock = socket(AF_INET,SOCK_STREAM,0);
				if (sock!=INVALID_SOCKET) 
					{
						SOCKADDR_IN socketaddr;
						socketaddr.sin_family = AF_INET;
						socketaddr.sin_addr.s_addr  = inet_addr("192.168.1.1"); 
						socketaddr.sin_port = htons(ushTestPort);
						int size=sizeof(socketaddr);
						sock=connect(sock,(LPSOCKADDR)&socketaddr,size);
						if (sock != SOCKET_ERROR )
							{
            					cout << "Port " <<ushTestPort << endl;
								ofs <<"Port " << ushTestPort << endl;
			
							}
						else ErrorInfo();
						closesocket(sock);
					}
					else cout << "error create socket" << endl;
		}	
	}
	WSACleanup();
	ofs.close(); 
}


void ErrorInfo()
{
	int i=WSAGetLastError();
	int g;
	switch (i)
	{
	case WSANOTINITIALISED :
		cout << "Not start WinSock" << endl;
		break;
    	case WSAENETDOWN:
		cout << "NetWork failed" << endl;
		break;
	case WSAEADDRINUSE:
		cout << "Socket in use " << endl;
		break;
    	case WSAEINTR:
		cout << "call  WSACancelBlockingCall" << endl;
		break;
    	case WSAEADDRNOTAVAIL:
		cout << "address not valid " << endl;
		break;
	case WSAETIMEDOUT:
		cout << "connection Time Out " << endl;
		break;
    	case WSAENOTSOCK:
		cout << "Not Socket " << endl;
		break;
    	case WSAECONNREFUSED:
		cout << "reject connection" << endl;
		break;
	default:
		cout << " ????? " << g << endl;
		cin >> g;
		break;
	}
}

Итак, все самое необходимое в цикле:

for (ushTestPort=2828;ushTestPort< 65535;ushTestPort++)
{
}

Создаем сокет, указываем ему IP адрес и порт и связываем наш сокет с удаленным функцией connect(). Дальше может быть две ситуации. Установлено соединение или нет. Если просто нет такого порта, то ошибка будет.

    case WSAECONNREFUSED:
		cout << "reject connection" << endl;
		break;

Именно такая ошибка. Все остальные связаны с другими причинами, а эта с отсутствием порта. Их много причин. Я не все обрабатываю. Посмотрите на default обработки ошибки:

default:
		cout << " ????? " << g << endl;
		cin >> g;

Ошибка неизвестна и я специально останавливаю программу, чтобы можно было начать с этого места. Конечно можно было сделать все лучше, только зачем ??? Это учебная программа и пожалуйста не пользуйтесь ею в хакерских целях. А лучше покажите начальству и пусть денег выделяют на защиту информации. Для этого пожалуйста. А защита сама напрашивается. Если зафиксирован перебор портов и хоть два порта перебрали, да еще за короткий промежуток времени - отрубать надо все и лучше сразу сервер от питания :-)))


Предыдущий шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz