Шаг 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
|