2009-05-04 11 views
2

J'ai besoin de compter la quantité d'octets envoyés et reçus du réseau par diverses applications. J'ai d'abord pensé à utiliser LSP, mais il y a beaucoup d'applications qui n'utilisent pas du tout LSP (SMB par exemple). C'est pourquoi j'ai écrit un petit renifleur. Cette application fonctionne au niveau IP et recueille des données en utilisant recvfrom. J'ai donc l'adresse de l'hôte distant, des ports locaux et distants. C'est plutôt cool, mais j'ai aussi besoin d'avoir un PID de propriétaire de socket locale. Alors, y a-t-il un moyen simple d'obtenir un tel PID? La solution utilise GetTcpTable, GetUdpTable Ou AllocateAndGetUdpExTableFromStack et AllocateAndGetTcpExTableFromStack (il y a beaucoup de différences dans ces fonctions entre 2k, XP, XP SP2 et Vista) et pour rechercher des tables de résultats, mais il semble inélégant et inefficace ...PID à partir du numéro de socket sur Windows?

Alors existe-t-il une sorte de fonction "GetPIDOfSocket"? La résolution doit être WinAPI (no .net) seulement, car plusieurs langages peuvent être utilisés, par exemple C++, Delphi.

+1

Comme vous semblez avoir rejoint récemment, permettez-moi de vous donner un indice: Il est généralement utile de fournir quel langage de programmation vous utilisez. Vous avez toujours un emplacement de tag vide pour le remplir :) –

Répondre

2

Désolé de devoir vous le dire, mais en utilisant GetTcpTable ou AllocateAndGetTcpExTableFromStack n'est pas une solution de contournement, c'est en fait comment les autres applications de type netstat fonctionnent. AFAIK il n'y a pas de fonction Win32 "GetPIDOfSocket", votre seule option est d'interroger en utilisant les fonctions de la table des ports. Mais au moins, vous pouvez le coder vous-même et ne pas avoir à générer le processus netstat. Voir le code source de SysInternals C pour netstatphere. Il n'y en a pas beaucoup et ça vaut le coup d'oeil.

Questions connexes