Comment savoir quelle application locale est connectée à mon socket (Windows)
-
05-07-2019 - |
Question
J'ai un service Windows qui se connecte à un port TCP, ce port est utilisé pour IPC entre mes applications.
Existe-t-il un moyen de programmation (WinAPI / WinSocket, etc.) pour savoir quelle application est connectée à mon port?
i.e. dans mes services Windows, je souhaite obtenir un PID du processus connecté à mon port.
La solution
Si vous recherchez une méthode WinAPI identique à netstat
. Vous voulez probablement l'API suivante:
GetExtendedTcpTable
Recherchez les résultats avec l'argument TCP_TABLE_OWNER_PID_ALL
.
La structure résultante MIB_TCPTABLE_OWNER_PID
contient de nombreux MIB_TCPROW_OWNER_PID
structures comportant dwOwningPid
, qui correspond à l'ID de processus recherché.
Autres conseils
Si vous voulez dire quel processus utilise (écoute ou connexion via) vos ports, utilisez la commande suivante:
netstat -a -b -o -n
-a
vous montrera toutes les connexions (même si elles sont à l'état LISTENING)
-b
vous montrera le fichier exécutable de l'application utilisant ce port
-o
vous montrera le PID de l'application
-n
ne fera pas de traduction DNS (vous n'en aurez probablement pas besoin pour connaître l'application), pas nécessaire