2

私は現在、ちょっとした便利なツールを作ろうとしています。私はネットワーク管理者ですが、上司から、ネットワークを監視し、特定のサイトといくつかのゲーム サーバーの 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();
4

2 に答える 2

2

私は gksudo を使用したことがありませんが、ググってみたところ、sudo の GUI バージョンであることがわかりました。stdout に何も書き込まず、返されない GUI アプリを起動したばかりだと思います。もしそうなら、コードは私が期待することをしています。プロセスが読み取り可能なテキスト行を書き込むまでブロックされます。これは発生しないため、無期限にブロックされます。

最初に、「echo」などの簡単なコマンドを使用して ProcessBuilder コードをテストし、Java コードが期待どおりに機能することを確認します。その後、戻って作業します。sudo 引数が不要になるように、プログラムを root として実行してみて、それが機能するかどうかを確認してください。最後に、gksudo の代わりに sudo を使用して実行してみます。

于 2012-10-07T02:23:33.960 に答える
0

I think @user is on the right track, but there are a couple of other possible explanations.

  1. The gksudo command could be asking for a password. I'm not sure where it would ask, but there's a good chance that it won't be the "stdout" stream of the "gksudo" process.

  2. If "gksudo" or the command that you are "gksudo"-ing fails to launch, there is a good chance that it will write an error message to its "stderr" stream. But you are not reading "stderr".

To help diagnose this, you need to try the following:

  • Look in the log file that for "sudo" - it is "/var/log/secure" on my box.
  • Use "ps -efl" (or similar) to see what processes exist while your application is blocked waiting for output. (If that is happening ...)
  • Look to see if "gksudo" is prompting for a password in an unexpected place.
  • Try temporarily tweaking the "sudoers" file to allow the "arpspoof" command to be "sudo"-ed without a password.
于 2012-10-07T02:50:45.013 に答える