繁体   English   中英

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

[英]How to start a process on a remote machine in C++ under Windows

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

提前致谢!

kampi

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

PSExec使用LAN上的服务控制管理器从“此处”启动服务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本身并不提供开箱即用的任何功能; 它带有远程shell服务(通常是停用或甚至没有安装)。

IIUC,psexec的作用是:

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

如果你不想使用psexec,你仍然可以这样做。 请注意,您需要一些特权才能这样做。

简单的答案是你做不到。 您所能做的就是向远程机器发送消息,要求它为您启动该过程。 PsExec在远程计算机上运行,​​侦听特定消息并启动进程以响应它们。

您可以使用现有协议(如PsExec),也可以创建自己的协议。 创建自己的要求您可以在远程计算机上安装服务。 如果远程机器不在您的控制之下,那么这是不可能的。 如果您设计自己的系统,则在设计协议时必须小心,因为您不希望无意中在系统中打开安全漏洞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM