【问题标题】:ProcessBuilder not executing program correctlyProcessBuilder 没有正确执行程序
【发布时间】:2012-10-07 00:07:17
【问题描述】:

我目前正在尝试制作一个小方便的工具,你看我是一名网络管理员,我的老板告诉我他希望我监控网络并阻止某些网站和某些游戏服务器的 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();

【问题讨论】:

    标签: java linux processbuilder


    【解决方案1】:

    我从未使用过 gksudo,但我用谷歌搜索它说它是 sudo 的 GUI 版本。我猜你刚刚启动了一个 GUI 应用程序,它不会向标准输出写入任何内容并且不会返回。如果是这样,那么代码正在做我所期望的。它一直处于阻塞状态,直到进程写入它可以读取的一行文本——这永远不会发生,因此它会无限期地阻塞。

    首先使用“echo”之类的简单命令测试您的 ProcessBuilder 代码,以确保您的 Java 代码按预期工作。然后回去工作。尝试以 root 身份运行您的程序,这样您就不需要 sudo 参数并查看它是否有效。然后最后尝试使用 sudo 而不是 gksudo 运行它。

    【讨论】:

      【解决方案2】:

      我认为@user 是正确的,但还有其他一些可能的解释。

      1. gksudo 命令可能要求输入密码。我不确定它会问到哪里,但很有可能它不会是“gksudo”进程的“stdout”流。

      2. 如果“gksudo”或您正在使用“gksudo”的命令无法启动,它很有可能会将错误消息写入其“stderr”流。但你不是在读“stderr”。

      为帮助诊断此问题,您需要尝试以下方法:

      • 查看“sudo”的日志文件 - 在我的盒子上是“/var/log/secure”。
      • 使用“ps -efl”(或类似名称)查看在您的应用程序被阻塞等待输出时存在哪些进程。 (如果发生这种情况......)
      • 查看“gksudo”是否在意想不到的地方提示输入密码。
      • 尝试暂时调整“sudoers”文件以允许“arpspoof”命令在没有密码的情况下被“sudo”编辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多