使用WMI和Remoting的完美组合来实现在远程计算机上创建进程及与之通讯

使用WMI和Remoting的完美组合来实现在远程计算机上创建进程及与之通讯

其实这两种技术都可以非常方便的实现在远程机器上创建进程这个目标。我这里之所以要结合使用,主要是为了方便远程进程之间的通讯。这里先介绍下Remoting的简单对象访问协议(soap)的通讯的信道的注册程序, 我把他命名为RemoteServer.exe, 它应在远程计算机(以下简称远程计算机为服务器)上配置在特定的目录下,一旦它被启动,那么这台远程计算机就将为我们提供soap 通道服务:ChannelServices,当然这个通道的端口,和服务器的名称,我们可以放到一个XML配置文件中。好了废话不多说了,还是让我做些实际的事情吧,那就看看这个程序的代码吧!

很简单吧?接着我要给出config.xml的内容:

可以看出config.xml亦很简单,RemoteObjectUri的值就是我们利用.NET Remoting访问远程对象时将要用到的一个URL,请务必小心配置,里面的[ServerName]在程序中会被动态替换为SUT02,注意这就是ServerName的值,该值务必设为远程计算机的名称或IP地址。冒号后面的22222就是你想使用的信道的端口号,最好设大点,以免已经被其他程序占用了。当然也不是越大越好,端口空间是1-65535。RemoteServer就是我们上面给出的程序可执行文件名称了,该可执行文件应该已经存放在Server的C:/upload/下面了,即UpLoadPath下面,后面还有一个配置,等下会提到,是用来试验我们刚刚使用.NET Remoting创建的信道来创建远程进程的一个程序可执行文件名称,该可执行文件应该已经存放在Server的C:/upload/下面了,即UpLoadPath下面。

到此为止,不知你有没有什么疑问,如果你没有疑问,那只能证明你比我还粗心,在列出RemoteServer代码的时候,我没有说明有关RemoteObject的东东。回顾上面的代码,你将发现:

其实也不难,SimpleRemotingAsm就是一个C# class Libruary程序,他里面只有一个Class:RemoteObject,这个类的实例将在服务器上产生,但是,实例的访问却是在我们的client上进行的,当然啦,要不怎么叫soap,要不怎么叫Remoting呢?呵呵。RegisterWellKnownServiceType调用后,服务端就一Singleton模式实例化了一个RemoteObject对象,“RemoteObject.soap”就是该对象的uri名称,注意这里是短格式的uri。好了,让我带领你看看SimpleRemotingAsm的程序代码吧:

很简单的吧,这个库只有一个类RemoteObject,该类只有一个方法RunCommand,方法只有一个参数,即要执行的命令字符串。

这个方法中有这么几行代码:

            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";

            ... ...

            p.StartInfo.CreateNoWindow = true;

 

这是说我们首先将创建一个控制台程序,并且该控制台是隐藏窗口运行的。

 

接下来看看,如何在客户端使用WMI远程创建RemoteServer进程,之后再利用RemoteServer进程注册的信道,进行Remoting通讯。

什么都没有代码更具说服力,那我就列出Client的代码吧:

这只是一个简单的在客户端使服务器上传一个病毒文件的应用,思路比较简单,首先利用WMI使远程服务器执行一个名字为RemoteServer.exe的隐藏控制台程序,以建立soap通道,进行后续的.NET Remoting调用,及Upload调用。最后Terminate使用一个在服务器端配好的一个bat脚本来关闭RemoteServer.exe隐藏控制台程序。

bat脚本的内容如下:

taskkill /f /im RemoteServer.exe

 

另外客户端程序需要注意添加WMI的引用:System.Management;

和Remoting的相关引用:

using System.Runtime.InteropServices;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;

读取配置文件时用到了XmlDocument,所以需要引用:using System.Xml;

还有就是我们的RemoteObject对象库的引用:using SimpleRemotingAsm;这在Upload方法中会用到。

 

最后,ClientConfig.xml的内容如下:

呵呵,很简单吧:)打字打得很累的,所以谢绝转载,谢谢合作!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值