![]() |
Welcher Dienst hinter welchem Port?
Hi!
Ich benütze folgenden Code, um herauszufinden, ob ein Port offen ist (nur im lokalen Netzwerk; nichts illegales :mrgreen: ):
Delphi-Quellcode:
Mich würde nun interessieren, ob ich irgendwie herausfinden kann, welcher Dienst hinter welchem Port steckt (zB Port 22 = SSH). Gibt es dafür eine Möglichkeit?
function PortPresent(const URL: String; Port: DWord): Boolean;
// URL can be like [url]www.developers.org[/url] or an IP like 127.0.0.1 var S: TSocket; A: SOCKADDR_IN; W: TWsaData; H: pHostEnt; begin Result := False; if WsaStartup(MakeWord(1, 1), W) = 0 then begin H := GetHostByName(PChar(URL)); if H <> nil then begin FillChar(A, SizeOf(A), 0); A.sin_family := AF_INET; A.sin_addr.S_addr := PDWord(H.h_addr_list^)^; A.sin_port := htons(Port); S := Socket(AF_INET, SOCK_STREAM, 0); if S <> INVALID_SOCKET then begin Result := Connect(S, A, SizeOf(A)) = 0; CloseSocket(S); end; end; end; WSACleanup; end; |
Re: Welcher Dienst hinter welchem Port?
Ja, indem du die Daten in einer art Datenbank speicherst.
Allerdings musst du dir vorher erst mal die Infos sammeln. ![]() |
Re: Welcher Dienst hinter welchem Port?
Gehts nicht einfacher?
zB dass man mit einer Funktion einen Art Identifier - String des Dienstes ausliest? Es kann ja auch sein, dass die Ports vom Systemadmin vertauscht werden. Wenns nicht geht, dann mach ichs mit der Datenbank, aber anders wärs mir lieber. Aber vorerst mal danke :) |
Re: Welcher Dienst hinter welchem Port?
In der WinSock gibt es...
Aus der MDSN
Code:
struct servent FAR * getservbyport(
int port, const char FAR *proto ); |
Re: Welcher Dienst hinter welchem Port?
Ich kann kein c. Könntest du mir das für Delphi übersetzen?
[edit]Schon geschafft. Danke[/edit] |
Re: Welcher Dienst hinter welchem Port?
Also ich bräuchte jetzt doch ein Beispiel. Ich habe es versucht mit
Delphi-Quellcode:
aber es geht nicht.
Edit1.Text := getservbyport(22,nil);
|
Re: Welcher Dienst hinter welchem Port?
Zitat:
Code:
Probiers evtl. mal mit
struct servent {
char FAR * s_name; char FAR * FAR * s_aliases; short s_port; char FAR * s_proto; };
Delphi-Quellcode:
Ansonsten mußt Du mal schauen, wie Du die Struct-Elemente in Delphi ansprichst.
Edit1.Text := getservbyport(22,nil).s_name;
Grüße Wolf |
Re: Welcher Dienst hinter welchem Port?
Hi Blechwolf!
Auf das mit dem Record hätte ich selber kommen können :wall: Ich habs jetzt so versucht:
Delphi-Quellcode:
Aber jedes mal wenn ich auf den Button drücke, bekomme ich eine Access Violation. Wieso? Was mache ich falsch?
procedure TForm1.Button1Click(Sender: TObject);
begin Edit1.Text := getservbyport(22,nil).s_name; end; |
Re: Welcher Dienst hinter welchem Port?
Weiß wirklich keiner was? :(
|
Re: Welcher Dienst hinter welchem Port?
Delphi-Quellcode:
var p : servent;
sTmp : String; begin p := getservbyport(22, nil); if p = nil then begin sTmp := p^.s_name; // Kopiere inhalt Edit1.Text := sTmp; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz