Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Geöffnete Ports auflisten: GetTCPTable IpHlpAPI (https://www.delphipraxis.net/143575-geoeffnete-ports-auflisten-gettcptable-iphlpapi.html)

Zacherl 18. Nov 2009 15:40


Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Hey,

ich möchte mir mit der GetTCPTable API aus der iphlpapi.dll alle geöffneten TCP Ports auflisten lassen. Seit Vista gibt es laut MSDN die erweiterte Funktion GetExtendedTCPTable, durch welche ich auch an die ProcessID des Besitzerprozesses gelange.

Meine Frage nun:
Gibt es eine Möglichkeit auch ohne die erweiterte API an die ProcessID des Besitzerprozesses zu gelangen? Netstat oder TCPView von Sysinternals schaffen das ja irgendwie scheinbar auch.

Viele Grüße
Zacherl

uoeb7gp 19. Nov 2009 15:55

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Liste der Anhänge anzeigen (Anzahl: 1)
HI, da sich sonst niemand meldet, anbei Src.

Bedank dich bei "Dirk Claessens"

have a lot of fun!

Zacherl 19. Nov 2009 20:27

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Hey,

vielen Dank erstmal, allerdings zeigt das Programm den Besitzerprozess überhaupt nicht an. :( Darum gings mir primär, weil die Extended APIs erst ab XP SP2 bzw. Vista zur Verfügung stehen. Dennoch kann ja auch das Win200er Netstat die dazugehörigen Prozesse anzeigen.

Viele Grüße
Zacherl

uoeb7gp 20. Nov 2009 10:43

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, anbei src, wo man den Prozess auch sieht.

lg.

Zacherl 20. Nov 2009 16:24

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Hey,

ah das sieht gut aus. Soweit ich das erkennen konnte, gibt es da noch die AllocateAndGetTcpExTableFromStack() API, welche man unter XP nutzen kann, wenn noch kein SP2 installiert wurde. Für die Win2000 früher scheint es dann keine Möglichkeit zu geben, den dazugehörigen Prozess zu einem Port zu ermitteln.

Viele Grüße
Zacherl

uoeb7gp 20. Nov 2009 16:39

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Hallo, ich arbeite ausschließlich mit Windows 2000 und da funktionierts tadellos!

lg.

Zacherl 20. Nov 2009 17:10

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Zitat:

Zitat von uoeb7gp
Hallo, ich arbeite ausschließlich mit Windows 2000 und da funktionierts tadellos!

Sicher, dass auch die zugehörigen ProzessIDs angezeigt werden? Laut Code passiert da nämlich folgendes:

Delphi-Quellcode:
// use latest API XP SP2, W2K3 SP1, Vista and later, first call : get size of table
      if ExFlag2 then
:arrow: GetExtendedTCPTable()

Delphi-Quellcode:
// use originally undocumented API, XP only, not Vista
      else if ExFlag then
:arrow: AllocateAndGetTcpExTableFromStack()

Delphi-Quellcode:
// use older documented API,
      else
:arrow: GetTCPTable()

Die letzte API ist allerdings nicht in der Lage die dazugehörigen Prozesse zu ermitteln.

uoeb7gp 20. Nov 2009 17:44

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, da hast sicher recht, hab mir API nicht angesehen.

TCPIPMonitor Demo zeigt jedenfalls ProzessID an.

Funktioniert unter W2000, XP, VISTA

Damit könnte man doch was anfangen, oder?

lg.

Fridolin Walther 20. Nov 2009 19:56

Re: Geöffnete Ports auflisten: GetTCPTable IpHlpAPI
 
Es gibt auch Pre-XP Methoden um an den Port zu kommen. Die wohl häufigste besteht darin einfach alle Handles zu enumerieren die auf UDP bzw. TCP Sockets verweisen und so an entsprechende Informationen zu gelangen. Eine entsprechende Implementierung in C gibts hier z.B.:
http://files.codes-sources.com/fichi...port.c&lang=en

Ich hab vor Jahren das Ganze auch mal in Delphi implementiert. Mal schauen ob ich den Source noch finde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz