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

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

Ree4

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

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();
}
}
//---------------------------------------------------------------------------
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#2
Ree4
Если я не ошибаюсь эта тема про Builder. Общие вопросы не на этом основываются.
 
R

Ree4

Гость
#3
ну какбы это общий вопрос, если не ошибаюсь, и попрошу по теме
 

lazybiz

Well-Known Member
03.11.2010
1 339
0
#4
Это общий вопрос в теме С++ Builder, т.ч. будь добр перенеси его туда.
 
R

Rififi

Гость
#6
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;

мде.

вот здесь - исходники правильного сканнера портов: http://nmap.org/

его даже Тринити в Матрице использовала для взлома терминала (((:)
 
R

Ree4

Гость
#7
вот, тип если подключился по порту, значит норм
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-часть для прогресса.
это как? ты в коде можеш это изобразить?