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");
}
}
,由於..
當我再次按下Stop Scan
謝謝EJP..'Process.destroy()'讓我可以打開文件'kbh-ns.pcap',但是'Process.destroy'它的確不會停止我的捕獲過程.. – 2013-03-03 07:50:57
Process.destroy()在功能上相當於Ctrl/c。我懷疑你還沒有告訴我們。 – EJP 2013-03-03 08:57:33
你可以看到我上面的源代碼的細節.. – 2013-03-03 12:14:48