Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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 ?
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.
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); } }
void TScanThread::Execute() { PortNr = 1; while (!Terminated) { WaitForSingleObject(ScanSemaphore,INFINITE); // Semaphore blev ignaleret.
if (Terminated) return; // Check om vi skal lukke ned.
ScanPort(PortNr++); } }
Synes godt om
Ny brugerNybegynder
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.