Ports



  • Gibt es eine funktion, wie ich nach Ports suchen kann oder so?
    Kann mir da einer Tipps geben, also so ne Art Port Scanner welche Ports benutzt werden, oder offen sind z.B.

    Wäre lieb...Danke...



  • Von was für Ports reden wir hier? Serial-Ports? Parallel-Ports? TCP/IP-Ports? UDP-Ports? Vielleicht Häfen?
    (-;

    -junix



  • Hier ist ein Beispiel für TCP/IP-Ports (allerdings für dem VC++).
    Aber ich denke, dass man das auch leicht für den BCB umschreiben kann.
    http://www.nickles.de/c/s/21-0009-152-1.htm



  • @JeGr

    [offtopic]
    Rettet den Dativ! 😃
    [/offtopic]

    [ Dieser Beitrag wurde am 12.02.2003 um 15:10 Uhr von F98 editiert. ]



  • meine natürlich TCP/IP Ports...

    hmm viel hilft mir das nicht, aber ist gut gewesen trotzdem, also das was ihr da rausgesucht habt....
    gibts es dazu Befehle oder so, die mir weiterhelfen könnten?



  • Habe mal einen einfachen Portscanner erstellt.
    Folgende Komponenten habe ich verwendet:
    - 4 x TEdit
    - 2 x TButton
    - 1 x TRichEdit
    - 1 x TClientSocket

    So, hier dann mal der Code
    (ist natürlich noch ausbaufähig, aber als Grundgerüst ganz brauchbar 😉 )

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    // Konstruktor
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
      // initialisiere private Variable
      AktuellePortNr = 0;
    }
    
    //---------------------------------------------------------------------------
    // StartButtonClick
    //---------------------------------------------------------------------------
    void __fastcall TForm1::StartButtonClick(TObject *Sender)
    {
      // leere Inhalt von RichEdit
      PortsRichEdit->Clear();
      // stelle Anfangszustand ein
      Init();
      // wenn Eingabe der Portnummern in Ordnung
      if(PruefePortEingaben())
      {
        // verbinde Socket mit angegebener IP und erster Portnummer
        VerbindeSocket();
      }
      // Eingabe war nicht in Ordnung
      else
      {
        // gib Meldung aus
        ShowMessage("Ungültige Angabe der Portnummern!");
        // stelle Anfangszustand wieder her
        Reset();
      }
    }
    
    //---------------------------------------------------------------------------
    // ScannerConnect
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ScannerConnect(TObject *Sender,
          TCustomWinSocket *Socket)
    {
      // Schreibe geöffnete Ports in RichEdit
      PortsRichEdit->Lines->Add("Port "+IntToStr(AktuellePortNr)+ " ist offen");
      // schliesse Verbindung zu Socket
      Scanner->Active = false;
      // erhöhe die Portnummer um eins
      AktuellePortNr++;
      // wenn End-Portnummer noch nicht erreicht ist
      if(AktuellePortNr <= StrToInt(EndPortEdit->Text))
      {
        // verbinde Socket mit neuem Port
        VerbindeSocket();
      }
      // End-Portnummer ist erreicht
      else
      {
        // gib Meldung aus
        ShowMessage("Scan beendet!");
        // stelle Anfangszustand wieder her
        Reset();
      }
    }
    
    //---------------------------------------------------------------------------
    // ScannerError
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ScannerError(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
    {
      // setze ErrorCode auf 0 damit keine Exception ausgelöst wird
      ErrorCode = 0;
      // schreibe aktuelle Portnummer in Infofeld
      AktuellerPortEdit->Text = "Aktuelle PortNr: "+IntToStr(AktuellePortNr);
      // schliesse Verbindung zu Socket
      Scanner->Active = false;
      // erhöhe Portnummrt um eins
      AktuellePortNr++;
      // wenn End-Portnummer noch nicht erreicht ist
      if(AktuellePortNr <= StrToInt(EndPortEdit->Text))
      {
        // verbinde Socket mit neuem Port
        VerbindeSocket();
      }
      // End-Portnummer ist erreicht
      else
      {
        // gib Meldung aus
        ShowMessage("Scan beendet!");
        // stelle Anfangszustand wieder her
        Reset();
      }
    }
    
    //---------------------------------------------------------------------------
    // StopButtonClick
    //---------------------------------------------------------------------------
    void __fastcall TForm1::StopButtonClick(TObject *Sender)
    {
      // setze aktuelle Portnummer auf End-Portnummer
      // -> Scan wird abgebrochen
      AktuellePortNr = StrToInt(EndPortEdit->Text);
    }
    
    //---------------------------------------------------------------------------
    // VerbindeSocket
    //---------------------------------------------------------------------------
    void __fastcall TForm1::VerbindeSocket()
    {
      // weise Socket die Adresse aus Eingabefeld zu
      Scanner->Address = IPEdit->Text;
      // weise Socket die aktuelle Portnummer zu
      Scanner->Port = AktuellePortNr;
      // stelle Verbindung mit Socket her
      Scanner->Active = true;
    }
    
    //---------------------------------------------------------------------------
    // Reset
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Reset()
    {
      // aktiviere StartButton
      StartButton->Enabled = true;
      // aktiviere IP-Adressen Eingabefeld
      IPEdit->Enabled = true;
      // aktiviere Start-Port Eingabefeld
      StartPortEdit->Enabled = true;
      // aktiviere End-Port Eingabefeld
      EndPortEdit->Enabled = true;
      // deaktiviere StopButton
      StopButton->Enabled = false;
      // trenne Verbindung mit Socket
      Scanner->Active = false;
    }
    
    //---------------------------------------------------------------------------
    // Init
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Init()
    {
      // deaktiviere StartButton
      StartButton->Enabled = false;
      // deaktiviere IP-Adressen Eingabefeld
      IPEdit->Enabled = true;
      // deaktiviere Start-Port Eingabefeld
      StartPortEdit->Enabled = false;
      // deaktiviere End-Port Eingabefeld
      EndPortEdit->Enabled = false;
      // aktiviere StopButton
      StopButton->Enabled = true;
      // ermittle Anfangs-Portnummer
      AktuellePortNr = StrToInt(StartPortEdit->Text);
    }
    
    //---------------------------------------------------------------------------
    // PruefePortEingaben
    //---------------------------------------------------------------------------
    bool __fastcall TForm1::PruefePortEingaben()
    {
      // ermittle Start-Port
      int StartPort = StrToInt(StartPortEdit->Text);
      // ermittle End-Port
      int EndPort = StrToInt(EndPortEdit->Text);
    
      // wenn Start-Port > oder = End-Port
      if(StartPort >= EndPort)
      {
        // gib FALSE zurück
        return false;
      }
      // ansonsten gib TRUE zurück
      return true;
    }
    
    //---------------------------------------------------------------------------
    // IPEditExit
    //---------------------------------------------------------------------------
    void __fastcall TForm1::IPEditExit(TObject *Sender)
    {
      //************************************************************************
      // TODO
      // - prüfen, ob nur Zahlen bzw. Punkte enthalten sind
      // - prüfen, ob 3 Punkte enthalten sind
      // - prüfen, ob das Format stimmt (aaa.bbb.ccc.ddd)
      //   (wobei einzlnes Token mindestens 1 und höchstens 3 Zahlen haben darf)
      //************************************************************************
    
      // wenn keine IP-Adresse einegeben wurde
      if(IPEdit->Text.IsEmpty())
      {
        // gib Meldung aus
        ShowMessage("Bitte IP-Adresse eingeben!");
        // setze Focus auf IP-Adressen Eingabefeld
        IPEdit->SetFocus();
        // markiere den Eintrag
        IPEdit->SelectAll();
      }
      // wenn weniger als 7 Zeichen eingegeben wurden
      else if(IPEdit->Text.Length() < 7)
      {
        // gib Meldung aus
        ShowMessage("Bitte gültige IP-Adresse eingeben!");
        // setze Focus auf IP-Adressen Eingabefeld
        IPEdit->SetFocus();
        // markiere den Eintrag
        IPEdit->SelectAll();
      }
    }
    
    //---------------------------------------------------------------------------
    // FormClose
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
      // trenne Verbindung mit Socket
      Scanner->Active = false;
    }
    
    //---------------------------------------------------------------------------
    // StartPortEditExit
    //---------------------------------------------------------------------------
    void __fastcall TForm1::StartPortEditExit(TObject *Sender)
    {
      // ermittle Inhalt von Start-Port Eingabefeld
      AnsiString Inhalt = StartPortEdit->Text;
    
      // prüfe Inhalt zeichenweise
      for(int i=1; i<= Inhalt.Length(); i++)
      {
        // wenn aktuelles Zeichen kein Zeichen ist
        if(!isdigit(Inhalt[i]))
        {
          // gib Meldung aus
          ShowMessage("Es sind nur Zahlen erlaubt!");
          // setze Focus auf Start-Port Eingabefeld
          StartPortEdit->SetFocus();
          // markiere den Eintrag
          StartPortEdit->SelectAll();
          // beende Schleife
          break;
        }
      }
    }
    
    //---------------------------------------------------------------------------
    // EndPortEditExit
    //---------------------------------------------------------------------------
    void __fastcall TForm1::EndPortEditExit(TObject *Sender)
    {
      // ermittle Inhalt von End-Port Eingabefeld
      AnsiString Inhalt = EndPortEdit->Text;
    
      // prüfe Inhalt zeichenweise
      for(int i=1; i<= Inhalt.Length(); i++)
      {
        // wenn aktuelles Zeichen kein Zeichen ist
        if(!isdigit(Inhalt[i]))
        {
          // gib Meldung aus
          ShowMessage("Es sind nur Zahlen erlaubt!");
          // setze Focus auf End-Port Eingabefeld
          EndPortEdit->SetFocus();
          // markiere den Eintrag
          EndPortEdit->SelectAll();
          // beende Schleife
          break;
        }
      }
    }
    //---------------------------------------------------------------------------
    


  • Hier noch schnell die *.h-Datei für die Faulen unter uns:

    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <ScktComp.hpp>
    
    class TForm1 : public TForm
    {
    __published:    // Von der IDE verwaltete Komponenten
            TEdit *IPEdit;
            TEdit *StartPortEdit;
            TEdit *EndPortEdit;
            TEdit *AktuellerPortEdit;
            TButton *StartButton;
            TButton *StopButton;
            TRichEdit *PortsRichEdit;
            TClientSocket *Scanner;
            TLabel *Label1;
            TLabel *Label2;
            TLabel *Label3;
            TLabel *Label4;
            void __fastcall ScannerConnect(TObject *Sender, TCustomWinSocket *Socket);
            void __fastcall StartButtonClick(TObject *Sender);
            void __fastcall ScannerError(TObject *Sender, TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode);
            void __fastcall StopButtonClick(TObject *Sender);
            void __fastcall IPEditExit(TObject *Sender);
            void __fastcall StartPortEditExit(TObject *Sender);
            void __fastcall EndPortEditExit(TObject *Sender);
            void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    private:    // Anwender-Deklarationen
            int AktuellePortNr;
            void __fastcall VerbindeSocket();
            void __fastcall Reset();
            void __fastcall Init();
            bool __fastcall PruefePortEingaben();
    public:     // Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    [ Dieser Beitrag wurde am 13.02.2003 um 11:16 Uhr von F98 editiert. ]


Anmelden zum Antworten