你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
Windows远程进程监控
 

亓传伟 ,王合闯

  要 本文通过VS.NET 2005下的C#语言创建一个用于远程监控客户机进程的Windows服务程序和Windows应用程序。通过该服务和应用程序可以得到客户机上运行的进程,并可远程结束其不当进程,使网络系统便于管理且更加安全。

关键词 线程,进程,SocketsWindows服务,进程监控

一、 Windows服务简介

Windows服务(也称Windows服务程序)是一些运行在Windows 2000Windows XP等操作系统下,需要长期运行的应用程序。它没有用户界面,并且也不会产生任何可视输出。如果将其启动方式设为自动,则计算机启动时服务自动运行。Windows服务是可控的,通过服务控制管理器,可以终止、暂停及当需要时重新启动。Windows服务的应用范围很广,它非常适合服务器环境,典型的应用包括硬件控制、诊断、系统级应用和应用程序监视等。下面将要探讨的远程进程监控,主要就是通过Windows服务来实现的。

二、远程进程监控通信过程

本系统采用C/S模式,客户机和服务器之间使用面向连接的TCP协议进行通信。本系统以学校机房为例,用教师机监控学生机运行的应用程序(进程),并可关闭学生机中不允许运行的应用程序(进程)。其方法是教师机作为客户端,安装监控程序;学生机作为服务器端,安装Windows服务(为了不让学生机知道该程序的存在),并让其开机自动运行;教师机启动监控程序(Telemonitor)后,利用学生机中的Windows服务(ServerListener)可连接到学生机,并查看学生机上运行的所有进程,并可根据需要关闭学生机中的相应进程。其通信过程如下:教师机向学生机请求联机并发送GetList命令串请求进程列表,学生机回送进程列表;教师机向学生机发送RunCMD+欲结束的进程名串,学生机执行命令,结束进程并回送结果。

三、学生机(Server端)安装部署

创建一个名称为ServerListenerWindows服务项目,该服务接受教师机的连接,向教师机发送进程列表,并执行教师机发送过来的指令,关闭学生机的进程。需要注意的是:在按F5运行Windows服务程序时,系统提示:“无法从命令行或调试器启动服务。必须先安装Windows服务(使用installutil.exe),然后用ServerExplorerWindows服务管理工具或NET START命令启动它。点确定按钮退出。”为此,需要在Service1.cs[设计]视图上右单击,选择添加安装程序,在ProjectInstaller.cs[设计]视图中选择serviceProcessInstaller1,更改其Account属性为LocalSystem(否则,执行installutil ServerListener.exe时出错),之后按F5编译,编译后仍有上述提示,这是因为该服务没有被安装(注册)。切换到Visual Studio 2005 命令提示,或找到installutil.exe文件,用installutil ServerListener.exe将其安装(注册)。然后就可以在服务列表中找到ServerListener服务,启动此服务,进行侦听。

1.创建TcpListener

TCP协议中采用监听(Listen/连接(Connect)方式实现通信。在.NET System.Net.Sockets命名空间提供了TcpListener类和TcpClient类实现该功能。实现核心代码如下:

TcpListener listener = new TcpListener(IPAddress.Any, 8888); //创建监听对象

            listener.Start();//启动监听对象

            while (true)

            {

             TcpClient client = listener.AcceptTcpClient();/创建TcpClient对象,等待与客户连接

                NetworkStream clientstream = client.GetStream();//创建网络数据流对象

                byte[] buffer = new byte[256];

                int readbytes = clientstream.Read(buffer, 0, buffer.Length); //读入数据流

                string request = Encoding.ASCII.GetString(buffer).Substring(0, readbytes);

                if (request.StartsWith("GetList"))

                {

//接收到的数据流以“GetList”开头,则回送进程列表,进程名间以"*"分隔//

                    Process[] myprocesses = Process.GetProcesses();

                    StringBuilder respmessage = new StringBuilder();

                    foreach (Process mprocess in myprocesses)

                        {

                            respmessage.Append(mprocess.ProcessName);

                            respmessage.Append("*");

                        }

byte[] respbuffer = Encoding.ASCII.GetBytes(respmessage.ToString());

clientstream.Write(respbuffer, 0, respbuffer.Length);

                }

                else if (request.StartsWith("RunCMD"))

                {

//接收到的数据流以“RunCMD”开头,则结束该进程,并回送结果//

                    string mycmd = request.Substring(7, request.Length-7);

                    Process[] myprocesses = Process.GetProcesses();

                   

                    foreach (Process mprocess in myprocesses)

                    {

                        if (mprocess.ProcessName.Trim()==mycmd)

                        {

                            mprocess.CloseMainWindow();

                            mprocess.Kill();

                        }

                    }

                    byte[] respbuffer = Encoding.ASCII.GetBytes(mycmd.Trim());

                    clientstream.Write(respbuffer, 0, respbuffer.Length);

                }

                clientstream.Close();//关闭数据流

                }

 

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089