0

JAVA から tshark を使用してパケットをキャプチャしようとしています。[以下を参照してください]

ターミナル(Ubuntu)からコマンドを試してみると、うまくいきました。しかし、JAVAからスローエラーtshark:

無効な -o フラグ "column.format:""source","

私は次の代替案を試しました[エラーメッセージは同じ]

String[] cmdArray = {"tshark -i any -o column.format:\"source, %s, srcport, %uS\" -f \"port 80 or port 443\""};

この:

String[] cmdArray = {"tshark -i any -o column.format:'source, %s, srcport, %uS' -f 'port 80 or port 443'"};


//CommandExc.java

import java.io.*;

import java.util.*;


public class CommandExc
{
public static void main (String args[])
 {

    //This worked Succcessfully
    //String[] cmdArray = {"tshark -D","sudo tshark -D"};

String[] cmdArray = {"tshark -i any -o column.format:\"\"source\", \"%s\",\"srcport\", \"%uS\"\" -f \"port 80 or port 443\""};

    for (String cmd: cmdArray) 
    {
         System.out.println("Executing command : "+cmd);
        try
        {
            Process proc = Runtime.getRuntime().exec(cmd); 
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String str = in.readLine();
            while(str != null)
            {
                System.out.println(str);
                //  res += str + "\n";
                str = in.readLine();
            }
            in.close();          

            BufferedReader in2 = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
            String str1 = in2.readLine();
            while(str1 != null)
            {
                System.out.println("Inside getErrorStream "+str1);
                //  res += str + "\n";
                str1 = in2.readLine();
            }
            in2.close();

            proc.waitFor();
            System.out.println("Exit value is : "+proc.exitValue());
            proc.destroy();
        }
        catch(IOException | InterruptedException e)
        {
            System.out.println("Exception on CommandExc class :" + e.toString());
                            e.printStackTrace();
        }
    } //end of for
  }
}
4

1 に答える 1

0

出来た。http://ask.wireshark.org/questions/17881/issue-with-tshark-oを参照してください

Java アプリケーションが無効な -o フラグを報告する問題は、Runtime.exec メソッドのバージョンが、提供された文字列を個別のコマンド ライン引数に分割する責任があるためです。デフォルトでは、このメソッドは、スペース、タブ、改行、キャリッジ リターン、およびフォーム フィード文字を使用します。ご覧のとおり、[column.format:\"\"source\",] [\"%s\",] の間に空白文字があるため、このバージョンの exec メソッドはそれらを 2 つの異なる引数として扱います。 .

解決策は、システム コマンドと引数を配列パラメーターとして受け取る Runtime.exec メソッドの別のバージョンを使用することです。したがって、次のように、コマンド ライン引数を手動で分割し、配列パラメーターで個別の文字列として定義することができます。

Process proc = Runtime.getRuntime().exec(new String[] { "tshark", "-i", "any", "-o", "column.format:\"source\", \"%s\ ", \"srcport\", \"%uS\"", "-f", "ポート 80 またはポート 443"});

于 2013-01-24T12:31:00.463 に答える