Как запустить процесс на удаленной машине в C ++ под Windows - PullRequest
1 голос
/ 12 октября 2009

Я использую Dev-C ++ под Windows. У меня вопрос, как я могу запустить процесс на удаленной машине? Я знаю, что PsExec может сделать это, но если это возможно, я хочу избегать его использования. Если кто-то может привести пример кода, я был бы признателен:)

Заранее спасибо!

Kampi

Ответы [ 4 ]

2 голосов
/ 13 октября 2009

Вы можете использовать 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);
2 голосов
/ 12 октября 2009

Если бы это было просто, хакеры могли бы запускать вредоносные программы на всех компьютерах, подключенных к Интернету.

PSExec использует диспетчер управления службами через локальную сеть для запуска EXE-файла службы «здесь», то есть с компьютера, на котором вы ее запускаете. Это требует много привилегий безопасности - например, права администратора.

Если вы не хотите этого делать, вы можете посмотреть SSH (есть примеры с открытым исходным кодом) или Remote Command Prompt (в Windows Resource Kit).

1 голос
/ 12 октября 2009

Было бы лучше, если у вас уже есть служба, запущенная на удаленной машине, которую вы можете попросить запустить программу. Сама Windows не предоставляет ничего полезного из коробки; он поставляется с удаленной службой оболочки (которая обычно отключена или даже не установлена).

IIUC, что psexec делает так:

  1. скопировать двоичный файл на удаленный компьютер, используя административный ресурс
  2. установить двоичный файл удаленно как службу, используя операции удаленного реестра
  3. запустить службу удаленно, используя API диспетчера управления службами.

Если вы не хотите использовать psexec, вы все равно можете сделать то же самое. Обратите внимание, что для этого вам необходимы некоторые привилегии.

0 голосов
/ 12 октября 2009

Простой ответ: вы не можете. Все, что вы можете сделать, это отправить сообщение на удаленный компьютер с просьбой запустить процесс для вас. PsExec работает на удаленной машине, прослушивая определенные сообщения и запуская процессы в ответ на них.

Вы можете использовать существующий протокол, такой как PsExec, или создать свой собственный. Создание собственного требует, чтобы вы могли установить службу на удаленном компьютере. Если удаленный компьютер не находится под вашим контролем, это невозможно. Если вы проектируете свою собственную систему, вы должны быть осторожны при разработке протокола, так как не хотите случайно открыть дыру в безопасности вашей системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...