Java ProcessBuilder未正确执行程序
我目前正在尝试制作一个方便的工具,你看,我是一名网络管理员,我的老板告诉我,他想让我监控网络,阻止某些网站和某些游戏服务器的ip,因此,对于监控部分,我们将把网络上的所有流量重定向到服务器,在服务器上我们可以监控流量,然后再将其发送到网关 为此,我们将在linux中使用Arpsopoof,我已经完成了一个站点和服务器阻塞的解决方案,我将制作一个GUI,使我能够更轻松地处理和控制这些事情。当我尝试使用ProcessBuilder从java运行Arpsopoof时,它不起作用,我没有得到任何输出 它也不会进入while循环。我真的想不出更多的东西来写atm,但如果我能想出更多,我会更新这个线程 我的代码:Java ProcessBuilder未正确执行程序,java,linux,processbuilder,Java,Linux,Processbuilder,我目前正在尝试制作一个方便的工具,你看,我是一名网络管理员,我的老板告诉我,他想让我监控网络,阻止某些网站和某些游戏服务器的ip,因此,对于监控部分,我们将把网络上的所有流量重定向到服务器,在服务器上我们可以监控流量,然后再将其发送到网关 为此,我们将在linux中使用Arpsopoof,我已经完成了一个站点和服务器阻塞的解决方案,我将制作一个GUI,使我能够更轻松地处理和控制这些事情。当我尝试使用ProcessBuilder从java运行Arpsopoof时,它不起作用,我没有得到任何输出 它
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,但我在谷歌上搜索过它,它说它是sudo的GUI版本。我猜您刚刚启动了一个GUI应用程序,它不会向stdout写入任何内容,也不会返回。如果是这样的话,那么代码就是我所期望的。它一直处于阻塞状态,直到进程写入一行它可以读取的文本——这永远不会发生,所以它会无限期地阻塞
首先使用“echo”这样的简单命令测试ProcessBuilder代码,以确保Java代码按预期工作。那就回去吧。尝试以root用户身份运行您的程序,这样您就不需要sudo参数,然后看看这是否有效。最后试着用sudo而不是gksudo来运行它。我认为@user的思路是正确的,但是还有一些其他可能的解释
- 在日志文件中查找“sudo”-在我的框中是“/var/log/secure”
- 使用“ps-efl”(或类似)查看在应用程序被阻止等待输出时存在哪些进程。(如果是这样的话……)
- 查看“gksudo”是否在意外的地方提示输入密码
- 暂时尝试调整“sudoers”文件,以允许“arpsopof”命令在没有密码的情况下被“sudo”-ed