为此我们将在linux中使用arpspoof并且我已经完成了阻止站点和服务器的解决方案,我将要做的是一个GUI,使我更容易处理和控制这些事情和当我尝试使用ProcessBuilder从java运行arpspoof它不起作用,我没有输出? O.o
它也没有进入while循环:/我真的不能想更多写atm,但如果我能想到更多我会更新这个帖子
我的代码:
new Thread() {
public void run() {
try {
System.out.println("running arpspoof...");
Process prb = new ProcessBuilder("gksudo", "arpspoof", "-i", "wlan0", Gateway).start();
InputStream is = prb.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println("Output: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
答案 0 :(得分:2)
我从来没有使用过gksudo,但是我用谷歌搜索它,它说它是sudo的GUI版本。我猜你刚刚推出了一个GUI应用程序,它不会向stdout写任何东西而且不会返回。如果是这样,那么代码正在做我期望的事情。它会阻塞,直到进程写入一行可以读取的文本 - 这种情况永远不会发生,因此会无限期地阻塞。
首先使用像“echo”这样的简单命令测试您的ProcessBuilder代码,以确保您的Java代码按预期工作。然后继续前进。尝试以root身份运行您的程序,这样您就不需要sudo参数,看看是否有效。然后最后尝试使用sudo而不是gksudo来运行它。
答案 1 :(得分:0)
我认为@user是正确的,但还有其他一些可能的解释。
gksudo命令可能要求输入密码。我不确定它会问什么,但很有可能它不会成为“gksudo”流程的“stdout”流。
如果“gksudo”或您“gksudo”-ing的命令无法启动,则很可能会向其“stderr”流写入错误消息。但你不是在读“stderr”。
为了帮助诊断,您需要尝试以下方法: