2013-03-01 27 views
1

在Linux終端我的分組捕獲命令..Stop的BufferedReader過程

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 

我quetion: 如何使與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"); 
    } 
} 

,由於..

enter image description here

當我再次按下Stop Scan

enter image description here

回答

0
不是真的停止我的過程

如何使用java命令使用^ c命令停止進程?請致電Process.destroy()

+0

謝謝EJP..'Process.destroy()'讓我可以打開文件'kbh-ns.pcap',但是'Process.destroy'它的確不會停止我的捕獲過程.. – 2013-03-03 07:50:57

+0

Process.destroy()在功能上相當於Ctrl/c。我懷疑你還沒有告訴我們。 – EJP 2013-03-03 08:57:33

+0

你可以看到我上面的源代碼的細節.. – 2013-03-03 12:14:48