Avatar billede danielhep Nybegynder
28. april 2002 - 22:02 Der er 9 kommentarer og
1 løsning

Port Sniffer

Hey

Jeg vil godt lave en Port-Sniffer i Builder 5.0 c++.

Det som den skulle kunne er at undersøge hvilke porte der er åbne.
Hvis der er en port åben så skal det add´s i en ListBox som angiver port nummer.

Et link eller en kode er ligefedt....  :)
Avatar billede uranhjorten Nybegynder
28. april 2002 - 22:13 #1
Ahh endnu en Cracker wannabe.... we don't like your kind around here, begone
Avatar billede danielhep Nybegynder
28. april 2002 - 22:29 #2
uranhjorten>>

Du er for langt ude!!!!
Avatar billede danielhep Nybegynder
28. april 2002 - 22:30 #3
Hvis du endelig vil høre hvad jeg skal bruge det til så er det til en server jeg er i gang med at programmere på min skole til en mindre ø-gruppe...
Avatar billede uranhjorten Nybegynder
28. april 2002 - 22:34 #4
nåååår ja..... ;D
Avatar billede ducks Nybegynder
28. april 2002 - 22:46 #5
Avatar billede soreno Praktikant
29. april 2002 - 16:13 #6
kan du ikke bare opfange output fra "netstat" (forudsat at det bliver til et windows program, det du laver), og så parse resultatet så det passer til det du skal bruge det til ?
Avatar billede laffe Nybegynder
29. april 2002 - 22:58 #7
Du kan gøre det med en (eller flere) TClientSocket komponent(er).

Lad os sige du bruger 1 ClientSocket.


ClientSocket->Address = "xxx.xxx.xxx.xxx"; // den ip du vil bruge
ClientSocket->Port    = 1;                // undersøg port 1
ClientSocket->Open();                      // Åben en forbindelse.

ClientSocket komponenten vil nu genere nogle events, alt afhængig af om der kunne skabes forbindelse eller ej.

Følgende events er værd at kigge på:
OnConnect 
OnDisconnet
OnError

Når du har afgjort om der kunne skabes forbindelse/ eller ej, så:

ClientSocket->Close();

Nu er du klar til at prøve den næste port.

ClientSocket->Port    = 2;                // undersøg port 2
ClientSocket->Open();                      // Åben en forbindelse.

Osv osv.
Avatar billede danielhep Nybegynder
30. april 2002 - 00:39 #8
ok ,men hvor laver man det sådan så det køre i en lykke som checker om den er åben, og skriver i en ListBox hvis den er sandt..
Avatar billede laffe Nybegynder
30. april 2002 - 15:39 #9
Du kunne jo lave en tråd der scanner en port ad gangen.

Når tråden skal scanne en port, så signalerer du den med en semaphore.
Avatar billede laffe Nybegynder
01. maj 2002 - 08:49 #10
Her er noget af Main koden. Den er ikke komplet. Den skal bare vise princippet:


// Denne metode sætter en socket forbindelse op, med en given IP+Port
TMainForm::ScanPort(int PortNr)
{
  ScanInProgress = false;
  ClientSocket->Close();                      // Luk forbindelsen.
  ClientSocket->Address = "xxx.xxx.xxx.xxx";  // den ip du vil bruge
  ClientSocket->Port    = PortNr;    // den port der skal undersøges 
  ScanInProgress = true;
  ClientSocket->Open();                      // Åben en forbindelse.
}

// Denne metode er en event routine fra ClientSocket, som indikerer, at du  fik forbindelse
void __fastcall TMainForm::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
  if (ScanInProgress)
  {
    // Du fik forbindelse. Registrer IP+PortNr.

    // Signaler din tråd. Du er nu klar til at scanne den næste port
    ReleaseSemaphore(ScanSemaphore,1,NULL);   
  }
}

// Denne metode er en event routine fra ClientSocket, som indikerer at der er sket en fejl. Porten anses for ikke at være tilgænglig (Det kan diskuteres!).
void __fastcall TMainForm::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
  ErrorCode = 0;
  if (ScanInProgress)
  {
    // Du fik en fejl.

    // Signaler din tråd. Du er nu klar til at scanne den næste port
    ReleaseSemaphore(ScanSemaphore,1,NULL);   
  }
}






Her er noget kode til tråden:

void TScanThread::ScanPort(int PortNr)
{
  MainForm->ScanPort(PortNr); 
}

void TScanThread::Execute()
{
  PortNr = 1;
  while (!Terminated)
  {
    WaitForSingleObject(ScanSemaphore,INFINITE);
    // Semaphore blev ignaleret.

    if (Terminated) return;  // Check om vi skal lukke ned.

    ScanPort(PortNr++);     
  }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester