簡體   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