1

我正在创建一个服务器/客户端应用程序,客户端可以在其中发送系统命令。

// Server Side
// command can be *nix/Windows system commands
public void run() {
  while(true) {
    try {    
      Runtime.getRuntime().exec(command);
    } catch (Exception e) {e.printStackTrace();}
  }
}

command从客户端发送,并通过执行它,在控制台中它不会执行命令而只是打印它。因此,如果command = "echo Hello",控制台(服务器端)中echo Hello的输出将不仅仅是Hello.

我应该使用哪种方法来执行系统命令?

4

2 回答 2

0

cmd /C echo hello

echo 不是已知/正常的 Windows 可执行文件,而是 cmd.exe 输入命令。

于 2013-09-02T08:35:12.707 回答
0

一种方法可以是将客户端发送的命令转储到临时文件(假设)Linux 之类的/tmp/some_cmds.sh并用于bash执行它,例如/usr/bin/sh /tmp/some_cmds.sh. 然后使用 java ProcessBuilderAPI 执行带有参数的 shell 作为临时文件。您可以将stdoutand重定向stderr到适当的文件,然后将其作为命令输出发送回客户端。

注意:此方法不能跨操作系统移植,而且也很危险,因为黑客可能会从您服务器上的客户端运行任意 cmd。

于 2013-09-02T08:37:01.090 回答