Bonjour,
Voilà une source qui permet de contrôler complètement les processus d'un PC distant !
Je sais qu'il existe WMI pour gérer les processus à distance, mais WMI est pas franchement convaincant car :
- il nécessite d'être installé sur les deux machines
- pas très rapide (en tout cas pour l'utilisation spécifique que l'on en fait en listant les processus)
- très très limité (impossible de faire autre chose que la liste des processus/modules, tuer/créer).
Bref voici une solution qui permet de contrôler ENTIEREMENT les processus du PC distant. Absolument tout est possible : kill, resume, suspend, priorité, affinité, liste des threads/handles, changement des privilèges, déchargement de module/handle, le tout à distance... Donc bien mieux que WMI lol :-p
Voici le fonctionnement (simple) :
- on fait tourner un 'serveur' sur la machine distante (certes la dénomination est un poil inversée ^^)
- on fait tourner un 'client' sur la machine qui contrôle les processus de la machine distante
- on relie tout çà par socket
- le client envoie des requêtes au serveur, et le serveur procède aux actions en fonction de la requête (kill, priorité, affinité, création de processus...) ou bien renvoie des informations (liste de processus, modules, threads...) au client.
Bref c'est très très très simple mais çà permet de faire ce que l'on veut sur la machine distante.
Bien sur il est nécessaire de lancer le serveur sur la machine distante, chose qui était inutile avec WMI... Revers de la médaille !
D'un point de vue programmation, ce code est intéressant pour :
- utilisation asynchrone des sockets
- utilisation des delegates/invoke plutôt que RaiseEvent
- utilisation de la serialization pour "convertir" un objet en byte array et inversement (et donc envoyer une instance de classe par le réseau).
Voilà comment tester le projet :
- lancer la solution (VS 2008, à convertir en 2005 si vous avez pas 2008)
- compiler le tout en release
- lancer le fichier server.exe sur une machine et client.exe sur une autre (ou bien sur la même !) (exe générés dans le dossier REALEASE)
- configurer l'adresse locale du serveur et cliquer sur connecter
- configurer l'adresse du client et connecter
- et voilà connection établie et dialogue possible.
Sinon, je n'ai pas implémenté toutes les fonctions, citées en haut, dans l'exemple fourni en *.zip. Pour la démo, il n'est que possible de lister les processus, les tuer, les suspendre, les reprendre, et lancer un processus à distance (explorer.exe dans l'exemple).
Par contre toutes les fonctions de gestion des processus sont disponibles dans la dll CoreFunc.dll, il suffit de changer la classe cSocketData.vb en l'adaptant pour pouvoir utiliser d'autres fonctions (exemple : ajouter des OrderType ...etc.). Le but n'est pas ici d'être exhaustif mais de montrer un principe de fonctionnement.
Cette dll a été codée par moi-même, mais je ne fournis pas le code source dans le fichier zip pour éviter de l'alourdir. Par contre, il est disponible en téléchargement en SVN ici :
http://sourceforge.net/projects/yaprocmon, ou bien dans la source "Yet Another Process Monitor".
Le but de cette source est de recevoir vos critiques/suggestions/idées/remarques : je vais en effet ajouter dans mon projet "Yet Another Process Monitor" le monitoring des processus distants via l'architecture client/serveur présentée ici en démo, en plus du monitoring local et via WMI, et comme je ne suis pas super familier avec la programmation réseau, c'est probablement pas super propre ce que j'ai fait donc corrigez moi svp !
@+
Source / Exemple :
' ziiip
' http://sourceforge.net/projects/yaprocmon pour le projet complet !
Conclusion :
Svp tous les commentaires sont les bienvenus !
Dernière chose : j'ai pas géré toutes les erreurs possible au niveau du réseau (déconnections, IP foirées, connections doubles...), c'est fait exprès.
@+
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.