2009-05-05 5 views
2

J'ai un service Windows qui se lie à un port TCP, ce port est utilisé pour IPC entre mon application.Comment savoir quelle application locale est connectée à mon socket (Windows)

Existe-t-il un moyen de programmation (WinAPI/WinSocket et etc.) pour savoir quelle application est connectée à mon port?

Dans mes services Windows, je souhaite obtenir un PID du processus connecté à mon port.

+0

Ceci est similaire à mon problème: http://stackoverflow.com/questions/819708/pid-from-socket-number-on-windows La réponse est sans doute la même. – smok1

Répondre

3

Si vous cherchez WinAPI façon de faire la même chose que netstat. Vous voulez probablement l'API suivante: GetExtendedTcpTable

Voir les résultats avec l'argument TCP_TABLE_OWNER_PID_ALL.

La structure résultante MIB_TCPTABLE_OWNER_PID a beaucoup de MIB_TCPROW_OWNER_PID structures qui a dwOwningPid qui est l'identification de processus que vous recherchez.

+0

Ceci est supporté par WinXP SP2 +. Si vous recherchez des versions plus anciennes, recherchez l'API AllocateAndGetTcpExTableFromStack. –

+0

Désolé, mais ce n'était pas mes questions, je voulais connaître le PID de l'application qui s'est connecté à mon port, pas le PID de l'application qui se lient au port. – Baget

+0

Vous ne pouvez pas le savoir depuis une machine distante. Vous ne connaissez que le port source et l'adresse IP. –

0

Si vous voulez dire quel processus utilise (écoute ou connecté à l'aide) vos ports, utilisez la commande suivante:

netstat -a -b -o -n

-a vous montrera toutes les connexions (même si elles en état ÉCOUTE)

-b vous montrera l'exécutable de l'application qui utilise ce port

-o vous montrera le PID de l'application

-n ne fera pas les traductions dns (vous ne avez probablement pas besoin de ces derniers pour savoir au sujet de l'application), ne sont pas nécessaires

+0

Merci pour la réponse, mais j'ai besoin de la programmation pour le faire. – Baget

Questions connexes