2017-03-07 13 views
0

私はKali Linuxでconsoleコマンドを実行しようとしていましたが、出力をJTextPaneにパイプすると出力がちょっと変わってしまいます。私がNetbeanの出力コンソールでそれを表示すると、それは問題ありませんでした。私が実行しようとしているJTextPaneは奇妙なコンソール文字を出力します

コマンド:wifite -e Experiment -c 1

enter image description here

コード:

public cracker(JTextPane aOutputPane) 
     { 
     super(); 
     mOutputPane = aOutputPane; 
    } 
    @Override 
    protected String doInBackground() throws Exception 
    { 
    Process p = null; 
    try 
    { 
     String Channel=CNinput.getText(); 
     String WName=WN.getText(); 
     p = Runtime.getRuntime().exec("wifite -e "+WName+" -c "+Channel); 
    } 
    catch (IOException ex) 
    { 
     Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    BufferedReader buf = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = ""; 
    String output = ""; 
    try 
    { 
     while ((line = buf.readLine()) != null) 
     { 
     publish(line); 
     output += line + "\n"; 
     } 
    } 
    cat 

ch (IOException ex) 
    { 
     Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    try 
    { 
     p.waitFor(); 
    } 
    catch (InterruptedException ex) 
    { 
     Logger.getLogger(home.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return output; 
    } 
    @Override 
    protected void process(java.util.List<String> aChunks) 
    { 
    mOutputPane.setText(null); 
    final String intermediateOutput = aChunks.stream().collect(Collectors.joining("\n")); 
    final String existingText = mOutputPane.getText(); 
    final String newText = existingText + "\n" + intermediateOutput; 
    mOutputPane.setText(newText); 

    } 

} 

答えて

2

の文字がwifiteによって生成されたターミナル出力の外観を制御するためのもの、ANSI escape codesです。あなたのオプションの中で、

  • doInBackground()の実装では、文字シーケンスを削除します。それらはすべてESC文字で始まります。

  • here)のように、コードを調べ、対応するスタイルをJTextPaneに要約します。

  • NetBeans consoleまたはJansihereなどのライブラリーを使用してください。

+0

あなたが言ったことでグーグルをした後で、私はそれが有用であることを発見しました、特にJansiは、それを.setTextに実装することは可能ですか?私は、System.out上でAnsiConsole.systemInstall();への限定された参照しか見つけられません。 –

+0

「Jansi」がこの使用法を直接サポートしているかどうかはわかりませんが、構文解析の方法を検討する価値はあるかもしれません。この文脈では、私は少数の 'SimpleAttributeSet'インスタンス以上を必要としませんでした。 – trashgod

+0

JtextpanelでSimpleAttributeSetを使用するにはどうすればいいですか?つまり、コンソールパイプ出力でjtextpanelにフォーマットされたテキストをパイプする方法は? –