我目前正在尝试制作一个小方便的工具,你看我是一名网络管理员,我的老板告诉我他希望我监控网络并阻止某些游戏服务器的某些站点和IP,所以对于监控部分我们将把网络上的所有流量重定向到服务器,我们可以在将流量发送到网关之前监控流量。
为此,我们将在 Linux 中使用 arpspoof,我已经完成了一个用于阻止站点和服务器的解决方案,我将制作一个 GUI,使我可以更轻松地处理和控制这些事情,当我尝试使用 ProcessBuilder 从 java 运行 arpspoof 时,它不起作用并且没有输出?
它也不会进入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();
最佳答案
我从未使用过 gksudo,但我用 google 搜索了一下,它说它是 sudo 的 GUI 版本。我猜你刚刚启动了一个 GUI 应用程序,它不会向标准输出写入任何内容,也不会返回。如果是这样,那么代码就按照我的预期进行了。它会阻塞,直到进程写入一行它可以读取的文本——这种情况永远不会发生,因此它会无限期地阻塞。
首先使用“echo”等简单命令测试您的 ProcessBuilder 代码,以确保您的 Java 代码按预期工作。然后按原路返回。尝试以 root 身份运行程序,这样就不需要 sudo 参数,然后看看是否有效。然后最后尝试使用 sudo 而不是 gksudo 来运行它。
关于java - ProcessBuilder 未正确执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764984/