如何在Windows下用C ++在远程计算机上启动一个进程

我在Windows下使用Dev-C ++。 我的问题是我如何启动远程机器上的进程? 我知道PsExec可以做到这一点,但如果可能的话,我想避免使用它。 如果有人可以举一些例子的代码,我将不胜感激:)

提前致谢!

kampi

如果这很容易,黑客会在所有暴露在互联网上的机器上启动恶意软件。

PSExec通过局域网上的服务控制管理器从“here”(即运行它的机器)启动服务EXE。 它需要很多安全特权 – 例如管理员权限。

如果您不想这样做,您可以查看SSH(有开源示例)或远程命令提示符(在Windows资源工具包中)。

你可以使用WMI …(C#示例,所以你必须找到相应的C ++)

ConnectionOptions connectOptions = new ConnectionOptions(); connectOptions.Username = "Administrator"; connectOptions.Password = "TopSecret"; ManagementScope scope = new ManagementScope( @"\\" + machine + @"\root\cimv2", connectOptions); scope.Connect(); ManagementPath path = new ManagementPath(@"Win32_Process"); ManagementClass proc = new ManagementClass(scope, path, new ObjectGetOptions()); ManagementBaseObject args = proc.GetMethodParameters("Create"); args["CommandLine"] = "C:\\Windows\\notepad.exe"; proc.InvokeMethod("Create", args, null); 

如果你已经有一个服务运行在远程机器上,你可以要求运行一个程序。 Windows本身并没有提供任何有用的东西, 它附带一个远程外壳服务(通常是停用的或者甚至没有安装)。

IIUC,psexec做的是这样的:

  1. 使用管理共享将二进制文件复制到远程计算机上
  2. 使用远程注册表操作将二进制文件作为服务远程安装
  3. 使用服务控制管理器API远程启动服务。

如果你不想使用psexec,你仍然可以这样做。 请注意,您需要相当的权限来执行此操作。

简单的答案是你不能。 你所能做的就是发送一条消息给远程机器,要求它为你启动进程。 PsExec在远程机器上运行,监听特定的消息并响应这些消息启动进程。

你可以使用现有的协议,比如PsExec,或者创建你自己的协议。 创建你自己的需要你可以在远程机器上安装一个服务。 如果远程机器不在您的控制之下,那么这是不可能的。 如果设计自己的系统,那么在设计协议时一定要小心,因为您不希望在系统中无意中打开安全漏洞。