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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Ree4, 7 мар 2011.

  1. Ree4

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ree4
    Если я не ошибаюсь эта тема про Builder. Общие вопросы не на этом основываются.
     
  3. Ree4

    Ree4 Гость

    ну какбы это общий вопрос, если не ошибаюсь, и попрошу по теме
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Это общий вопрос в теме С++ Builder, т.ч. будь добр перенеси его туда.
     
  5. Ree4

    Ree4 Гость

    каким образом? я тут недавно
     
  6. Rififi

    Rififi Гость

    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/

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

    Ree4 Гость

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

Поделиться этой страницей