Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Herausfinden ob Prozess auf bestimmten TCP Port "horcht" (https://www.delphipraxis.net/114615-herausfinden-ob-prozess-auf-bestimmten-tcp-port-horcht.html)

hirnstroem 28. Mai 2008 10:48


Herausfinden ob Prozess auf bestimmten TCP Port "horcht
 
'loha Folks,

die Situation ist folgende:

Mehrere Instanzen einer Java Applikation laufen auf derselben Maschine. Jede Instanz horcht auf einen anderen TCP Port.

Es wird ein Progrämmlein benötigt mit, welchem einzelne Instanzen beendet werden können. Damit dies geordnet von statten gehen kann, werden zuerst alle Instanzen (jeweils ein java.exe mit einem cmd.exe als Elternteil) aufgelistet (Name und PID). Dies funktioniert soweit auch.

Was fehlt ist die Information, welches java.exe auf welchen Port hört, sprich, ich sehe nicht, wie ich an diese Information kommen könnte, weiss aber, dass es grundsätzlich möglich ist.

Helfende Worte werden gerne entgegengenommen.

Grüsse
hirnstroem

Sherlock 28. Mai 2008 10:52

Re: Herausfinden ob Prozess auf bestimmten TCP Port "ho
 
Verstehe ich das richtig: Du willst über TCP/IP festellen, welche EXE an welchem Port horcht?

Dann lass doch die EXEn selber diese Mitteilung machen...meinetwegen ausgelöst durch eine bestimmte Befehlszeichenfolge.
Dann kommt halt zurück: "Name.exe on Port nnn"

Edit: Das ganze natürlich nur, wenn du die JAVA.exen auch verändern kannst.

Sherlock

hirnstroem 28. Mai 2008 11:06

Re: Herausfinden ob Prozess auf bestimmten TCP Port "ho
 
Liste der Anhänge anzeigen (Anzahl: 1)
Entweder über TCP/IP, oder über den jeweiligen Prozess.

Mit einem Tool Namens Process Explorer (Bild im Anhang), lassen sich solche Informationen anhand des Prozesses ausfindig machen. Wird das entsprechende java.exe angeklickt, gelangt man an die Information, auf welchen Port dieses horcht. Und diese Funktionalitat (vom Prozess zum TCP Port) wäre irgendwie wünschenswert.

Die java.exe Dateien zu verändern wäre zwar machbar, ich möchte dies aber eigentlich vermeiden.

Luckie 28. Mai 2008 11:18

Re: Herausfinden ob Prozess auf bestimmten TCP Port "ho
 
Guck dir mal meinen IPMonitor an: http://www.michael-puff.de/Developer/Delphi/Programme/

hirnstroem 28. Mai 2008 11:59

Re: Herausfinden ob Prozess auf bestimmten TCP Port "ho
 
Das Problem bei solchen Tools (IPMonitor) ist, dass diese unter Umständen gar nicht bemerken, dass da noch so ein java.exe (oder mehrere) auch auf irgend einen Port horchen. Auch netstat im Kommandozeileninterpreter zeigt dieses horchen nicht in allen Fällen. Dass das java.exe auf einen Port horcht, wird in beiden Fällen nur erkannt, wenn jemand darauf zugreift. Greift momentan niemand darauf zu, wird nichts angezeigt.

Mit folgendem Code werden sämtliche java.exe Instanzen und deren elterliches cmd.exe ermittelt und in einer Tree View Komponente angezeigt:

Delphi-Quellcode:
procedure TfrmMain.SetCmdExeAndAppendantJavaExeInstancePIDs;
var
  hProcSnap: THandle;
  ProcessEntry32: TProcessEntry32;
  ParentPID: DWORD;
begin
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap = INVALID_HANDLE_VALUE then
  begin
    Exit;
  end;
  ProcessEntry32.dwSize := SizeOf(ProcessEntry32);
  if Process32First(hProcSnap, ProcessEntry32) = True then
  begin
    repeat
      if Pos(JAVA_EXE, ProcessEntry32.szExeFile) <> 0 then
      begin
        if Pos(CMD_EXE, GetProcessNameFromPid(ProcessEntry32.th32ParentProcessID)) <> 0 then
        begin
          // add process name and id of java.exe and parental cmd.exe to tree view (as parent and child)
          with tvPIDs.Items do
          begin
            AddChild(Add(nil, CMD_EXE + SEPARATOR + IntToStr(ProcessEntry32.th32ParentProcessID)), JAVA_EXE + SEPARATOR + IntToStr(ProcessEntry32.th32ProcessID));
          end;
        end;
      end;
    until Process32Next(hProcSnap, ProcessEntry32) = False;
  end;
  CloseHandle(hProcSnap);
end;
Die Suche, wie über eine Prozess ID ermittelt werden kann, ob und wenn ja auf welchen Port der Prozess horcht, war allerdings noch nicht erfolgreich.

[edit]
Dass das java.exe unter Umständen über netstat etc. nicht aufelistet wird, wenn niemand darauf zugreift, stimmt nicht so ganz, wie ich soeben herausgefunden habe. Der Port wird aufgeführt und die Prozess ID lässt sich auch ermitteln (netstat -noa).

Das Thema hat sich für mich somit erledigt. Danke für die Hinweise!
[/edit]

Luckie 28. Mai 2008 12:28

Re: Herausfinden ob Prozess auf bestimmten TCP Port "ho
 
Zitat:

Zitat von hirnstroem
Das Problem bei solchen Tools (IPMonitor) ist, dass diese unter Umständen gar nicht bemerken, dass da noch so ein java.exe (oder mehrere) auch auf irgend einen Port horchen.

Dann Such doch nur nach den java.exe Prozessen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 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