• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Сканер портов

  • Автор темы Автор темы Ree4
  • Дата начала Дата начала
R

Ree4

Здравствуйте. пишу сканер портов. Почемуто он выводит все заданные порты, несмотря на то что некоторые из них закрыты.
и во время работы приложение виснет, когда оно заканчивает сканирование, отвисает.
в чём может быть причина?

C++:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void scan()
{
TTreeNode * n;
Form1->ProgressBar1->Max = Form1->Memo1->Lines->Count;
Form1->ProgressBar2->Max = Form1->Memo2->Lines->Count;
for(int ip = 0; ip < Form1->Memo2->Lines->Count; ip++)
{
Form1->UdpSocket1->RemoteHost = Form1->Memo2->Lines->Strings[ip]; //ip udp
Form1->TcpClient1->RemoteHost = Form1->Memo2->Lines->Strings[ip];//ip tcp
n = Form1->TreeView1->Items->Add(Form1->TreeView1->Selected,Form1->Memo2->Lines->Strings[ip]);

for (int i = 0; i < Form1->Memo1->Lines->Count; i++)
{
Form1->UdpSocket1->RemotePort = StrToInt(Form1->Memo1->Lines->Strings[i]);
Form1->TcpClient1->RemotePort = StrToInt(Form1->Memo1->Lines->Strings[i]);
Form1->UdpSocket1->Active = true;
Form1->TcpClient1->Active = true;

if ((Form1->TcpClient1->Connect() && Form1->UdpSocket1->Connect()) || (Form1->TcpClient1->Connect() || Form1->UdpSocket1->Connect()))
{
Form1->TreeView1->Items->AddChild(n,Form1->Memo1->Lines->Strings[i]);
}
Form1->ProgressBar1->StepBy(i);
}
Form1->ProgressBar1->StepBy(ip);
}
Form1->ProgressBar1->StepBy(0);
Form1->ProgressBar2->StepBy(0);
Form1->Memo1->Lines->Clear();
Form1->Memo2->Lines->Clear();
ShowMessage("Сканирование завершено");
}

void stop()
{
Form1->TcpClient1->Active = false;
Form1->UdpSocket1->Active = false;
}
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
stop();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->TreeView1->Items->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)
{
scan();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
scan();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N4Click(TObject *Sender)
{
stop();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
Form2 = new TForm2(Application);
Form2->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(Memo1->Text == "" && Memo2->Text == "")
{
Memo1->Lines->LoadFromFile("port.txt");
Memo2->Lines->LoadFromFile("ip.txt");
}
else
{
ShowMessage("Введите значения в Настройках");
Form2->ShowModal();
}
}
//---------------------------------------------------------------------------
 
Ree4
Если я не ошибаюсь эта тема про Builder. Общие вопросы не на этом основываются.
 
ну какбы это общий вопрос, если не ошибаюсь, и попрошу по теме
 
Это общий вопрос в теме С++ Builder, т.ч. будь добр перенеси его туда.
 
Ree4

чтобы приложение не подвисало, сканирование следует проводить в отдельном потоке и периодически аннонить GUI-часть для прогресса.

Почемуто он выводит все заданные порты, несмотря на то что некоторые из них закрыты.

честно говоря не увидел где само "сканирование", вот это что ли?

Form1->UdpSocket1->RemotePort = StrToInt(Form1->Memo1->Lines->Strings);
Form1->TcpClient1->RemotePort = StrToInt(Form1->Memo1->Lines->Strings);
Form1->UdpSocket1->Active = true;
Form1->TcpClient1->Active = true;

мде.

вот здесь - исходники правильного сканнера портов:

его даже Тринити в Матрице использовала для взлома терминала ((((:
 
вот, тип если подключился по порту, значит норм
C++:
 if ((Form1->TcpClient1->Connect() && Form1->UdpSocket1->Connect()) || (Form1->TcpClient1->Connect() || Form1->UdpSocket1->Connect()))
{
Form1->TreeView1->Items->AddChild(n,Form1->Memo1->Lines->Strings[i]);
}

Добавлено:
чтобы приложение не подвисало, сканирование следует проводить в отдельном потоке и периодически аннонить GUI-часть для прогресса.
это как? ты в коде можеш это изобразить?
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab