Пишем простейший сканер портов на Delphi
Пишем простейший сканер портов на Delphi
В свое время именно такой документ я искал бороздя просторы рунета. Сегодня мы
напишем самую распространенную хакерскую утилиту - Сканер портов на Delphi.
Хочу еще раз напомнить, что нижеприведенныйкод написан лишь в обучающих целях.
Итак, для начала хочу объяснить тебе принцип работы программы. Делаем попытку
соединения с портом, если сервер не отвечает, то значит значит порт закрыт. Если же наоборот, то
выводим номер открытого порта на экран.
Приступим-с...
При написании нашей программы мы будем использовать библиотеку WinSock.dll
Для ее использования добавляем в раздел uses строчку WinSock.
Cтартуем библиотеку WinSock функцией WSAStartup.
Аргументами этой функции являются:
wVersion - параметр типа WORD который обозначает версию стартующей библиотеки.
WSDATA - параметр в который будет записана информация о текущем состоянии библиотеки,
этот параметр имеет тип TWSAData.
Фунция при успешном выполнении возвращает 0.
Но просто работающая библиотека нам не поможет, мы должны соединятся с сервером
через сокет.
Подготовить сокет к работе очень просто, для этого есть функция socket.
Итак, аргументы:
af - Тип адресации: PF_INET - синхронная, AF_INET - асинхронная.
struct - базовый протокол: SOCK_STREAM - TCP, SOCK_DGRAM - UDP.
protocol - используемый протокол.
В случае ошибки функция возвращает INVALID_SOCKET, прои успешном завершении
структуру типа TSocket.
Про то, как адресовать соединение тебе станет ясно из кода проги, а я лучше
расскажу тебе как его установить. Для установления соединения нужно выполнить функцию connect.
Как обычно:
Socket - переменная которую мы получили с помощю socket();
addr - пременная типа TSockAddr
addr_size - размер переменной addr.
Фунция при успешном соединении возвращает 0.
В принципе я рассказал тебе все что нужно, осталось только дать исходник. program
e2s;
{$APPTYPE CONSOLE}
uses
Winsock;
var
WSAData:TWSAData; //В эту переменную будет возвращатся информация о состоянии WinSock
FSocket:TSocket; //Сокет
addr:TSockAddr; //Структура адреса
host:String; //Адрес сканируемого хоста
beg_port,end_port:integer; //Начальный и конечный порты
i:integer; //Счетчик (в дальнейшем понадобится)
err_code:integer; //Сюда вернется код ошибки выполнения операции перевода
String->Integer
begin
Writeln('Port scanner by x4re$ [Dark software]');
//Выводим на экран строку about. Фон кстати черный, как и положено
//Проверяем все ли параметры были введены.
if(Paramstr(1)='') or (Paramstr(2)='') or ((Paramstr(3)=''))
then begin
Writeln('USAGE: e2s.exe servername 21 80');
halt;
end;
host:=ParamStr(1); //Присваеваем переменной host первый параметр командной строки.
//Присваеваем переменным beg_port и end_port 2 и 3 параметры командной строки.
//Я использую здесь именно эту процедуру т.к. не хочу использовать модуль SysUtils.
Val(ParamStr(2),beg_port,err_code);
Val(ParamStr(3),end_port,err_code);
//Проверяем правильность диапазона портов
if beg_port>end_port then begin
writeln('ERROR: Invalid port range.');
halt;
end;
writeln('Scanning ',host,' for open ports.'); //Вопросы есть ?
addr.sin_family:=AF_INET; //Мутим адресацию, в нашем случае - асинхронная.
addr.sin_addr.S_addr:=inet_addr(pchar(host)); //Заполняем поле адреса.
if WSAStartup($101,WSAData)<>0 then begin
//Если произошла ошибка при старте WinSock выводим сообщение и выходим.
Writeln('ERROR: Initialization error.');
halt;
end;
for i:=beg_port to end_port do begin // С перврго по последний порт начинаем сканить.
FSocket:=socket(AF_INET,SOCK_STREAM,0); //Создаем гнездо.
if FSocket=INVALID_SOCKET then begin
//Если если ошибка при создании гнезда то...
Writeln('ERROR: Initialization error.');
halt;
end;
addr.sin_port:=htons(i); //Присваеваем значению порта текущее значение счетчика.
if connect(FSocket,addr,sizeof(addr))=0 then begin
//Ури, открытый порт.
Writeln(host,':',i,' - opened.');
CloseSocket(FSocket);
end;
end;
WriteLn('Scanning complete');
WSACleanup;
Информация о статье "Пишем простейший сканер портов на Delphi"
DeVoid |
http://devoid.com.ua/ |
6 Декабря 2007 |
Просмотрели 6761 раз
КОММЕНТАРИИ
Комментариев еще нет.
Зарегистрируйтесь или выполните Вход для того чтобы оставлять комментарии


Не менее интересно