Question

Je dois compter le nombre d'octets envoyés et reçus du réseau par diverses applications. J'ai d'abord pensé à utiliser le LSP, mais de nombreuses applications n'utilisent pas du tout le LSP (SMB par exemple). C'est pourquoi j'ai écrit un petit renifleur. Cette application fonctionne au niveau IP et collecte des données à l'aide de 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 du PID du propriétaire de la prise locale. Alors, existe-t-il un moyen simple d'obtenir un tel PID? La solution de contournement consiste à utiliser GetTcpTable, GetUdpTable ou AllocateAndGetUdpExTableFromStack et AllocateAndGetTcpExTableFromStack (il y a beaucoup de différences dans ces fonctions entre 2k, XP, XP SP2 et Vista) et de rechercher des tableaux de résultats, mais cela semble inélégant ... /

Donc, existe-t-il un type de " GetPIDOfSocket " une fonction? La résolution doit uniquement être WinAPI (no .net), car différents langages peuvent être utilisés, par exemple C ++, Delphi.

Était-ce utile?

La solution

Désolé de devoir vous le dire, mais utiliser GetTcpTable ou AllocateAndGetTcpExTableFromStack n'est pas une solution de contournement, c'est en fait le fonctionnement d'autres applications de type netstat. Autant que je sache, il n’existe pas de fonction Win32 "GetPIDOfSocket" , votre seule option est d’interroger à l’aide des fonctions de la table de ports. Mais au moins, vous pouvez le coder vous-même et ne pas générer le processus netstat.

Voir le code source C de SysInternals pour netstatp ici . Il n'y en a pas beaucoup et ça vaut le coup d'oeil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top