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]