1

Linuxターミナルでの私のパケットキャプチャコマンド..

sudo tcpdump -w kbh-ns.pcap -i lo greater 106 and less 106

i を押すと、プロセスが停止し、キャプチャされたパケットが保存されます

^ c

私はそれを行うために BufferedReader を使用する以下のようなコードを持っています

public void SaveCapture() throws IOException
{
    List<String> command1 = new ArrayList<String>();
    //perintah untuk mecari koneksi ( SIP DIP SPort DPort )
    command1.clear();
    command1.add("sudo"); command1.add("tcpdump");
    command1.add("-w"); command1.add("kbh-ns.pcap"); //write
    command1.add("-i"); command1.add("vmnet1"); //interface
    command1.add("greater");command1.add("106"); //packet length
    command1.add("and");
    command1.add("less"); command1.add("106");//packet length
    command1.add("-c"); command1.add("20");

    ProcessBuilder pb = new ProcessBuilder(command1);
    process = pb.start();
    ProcessBuilder PB = new ProcessBuilder(command1);
    Process TerminalTask = PB.start();

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));

    String s;
    s = stdInput.readLine();
}

私が使用すると動作します

command1.add("-c"); command1.add("5");//number of packets to capture

私の質問:Javaで^cコマンドを使用してプロセスを停止するにはどうすればよいですか?

私が使用する場合process.destroy()

private void ButtonStopScanActionPerformed(java.awt.event.ActionEvent evt) {                                               
    if (process != null)
    {
        process.destroy();
        TxtAreaKet.setText(TxtAreaKet.getText() + "Complete.. \n");
    }
    end = System.currentTimeMillis();
    try {
        ReadPacket();
    } catch (IOException ex) {
        Logger.getLogger(Receiver1.class.getName()).log(Level.SEVERE, null, ex);
    }
    TxtAreaKet.setText(TxtAreaKet.getText() + "waktu : "+ ((end - start) / 1000.0) + " ms");        
} 

private void ReadPacket() throws IOException {
    List<String> command1 = new ArrayList<String>();
    //perintah untuk mecari koneksi ( SIP DIP SPort DPort )
    command1.clear();
    command1.add("sudo"); command1.add("tcpdump");
    command1.add("-r"); command1.add("kbh-ns.pcap"); //read
    command1.add("-n"); 

    ProcessBuilder pb = new ProcessBuilder(command1);
    process2 = pb.start();
    ProcessBuilder PB = new ProcessBuilder(command1);
    Process TerminalTask = PB.start();

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(process2.getInputStream()));
    BufferedReader stdError = new BufferedReader(new InputStreamReader(process2.getErrorStream()));

    String s;
    long a = 0;
    while ((s = stdInput.readLine()) != null)
    {
        a++;
    }
    TxtAreaKet.setText(TxtAreaKet.getText() + "Captured Packet : " + a + "\n");
    while ((s = stdError.readLine()) != null)
    {
        TxtAreaKet.setText(TxtAreaKet.getText() + s + "\n");
    }
}

それは本当に私のプロセスを止めるものではありません..

ここに画像の説明を入力

Stop Scanもう一度押すと

ここに画像の説明を入力

4

1 に答える 1

0

javaで^cコマンドでプロセスを停止させるには?

電話するだけProcess.destroy()です。

于 2013-03-01T04:03:50.613 に答える