📄 jcccapturedialog.java
字号:
package ccsniffer.ui;
import jpcap.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JCCCaptureDialog extends JDialog implements ActionListener
{
static JpcapCaptor jpcap=null;
NetworkInterface[] devices;
JComboBox adapterComboBox;
JTextField filterField,caplenField;
JRadioButton wholeCheck,headCheck,userCheck;
JCheckBox promiscCheck;
public JCCCaptureDialog(JFrame parent){
super(parent,"选择要检测的网卡并设置参数",true);
devices=JpcapCaptor.getDeviceList();
if(devices==null){
JOptionPane.showMessageDialog(parent,"没有找到网卡.");
dispose();
return;
}else{
String[] names=new String[devices.length];
for(int i=0;i<names.length;i++)
names[i]=(devices[i].description==null?devices[i].name:devices[i].description);
adapterComboBox=new JComboBox(names);
}
JPanel adapterPane=new JPanel();
adapterPane.add(adapterComboBox);
adapterPane.setBorder(BorderFactory.createTitledBorder("清选择网卡"));
adapterPane.setAlignmentX(Component.LEFT_ALIGNMENT);
promiscCheck=new JCheckBox("是否设置为混杂模式");
promiscCheck.setSelected(true);
promiscCheck.setAlignmentX(Component.LEFT_ALIGNMENT);
filterField=new JTextField(20);
//filterField.setMaximumSize(new Dimension(Short.MAX_VALUE,20));
JPanel filterPane=new JPanel();
filterPane.add(new JLabel("过滤字"));
filterPane.add(filterField);
filterPane.setBorder(BorderFactory.createTitledBorder("捕获过滤器"));
filterPane.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel caplenPane=new JPanel();
caplenPane.setLayout(new BoxLayout(caplenPane,BoxLayout.Y_AXIS));
caplenField=new JTextField("1514");
caplenField.setEnabled(false);
caplenField.setMaximumSize(new Dimension(Short.MAX_VALUE,20));
wholeCheck=new JRadioButton("整个数据报");
wholeCheck.setSelected(true);
wholeCheck.setActionCommand("Whole");
wholeCheck.addActionListener(this);
headCheck=new JRadioButton("仅首部");
headCheck.setActionCommand("Head");
headCheck.addActionListener(this);
userCheck=new JRadioButton("其他部分");
userCheck.setActionCommand("Other");
userCheck.addActionListener(this);
ButtonGroup group=new ButtonGroup();
group.add(wholeCheck);
group.add(headCheck);
group.add(userCheck);
caplenPane.add(caplenField);
caplenPane.add(wholeCheck);
caplenPane.add(headCheck);
caplenPane.add(userCheck);
caplenPane.setBorder(BorderFactory.createTitledBorder("Max capture length"));
caplenPane.setAlignmentX(Component.RIGHT_ALIGNMENT);
JPanel buttonPane=new JPanel(new FlowLayout(FlowLayout.RIGHT));
JButton okButton=new JButton("确定");
okButton.setActionCommand("OK");
okButton.addActionListener(this);
JButton cancelButton=new JButton("取消");
cancelButton.setActionCommand("Cancel");
cancelButton.addActionListener(this);
buttonPane.add(okButton);
buttonPane.add(cancelButton);
buttonPane.setAlignmentX(Component.RIGHT_ALIGNMENT);
JPanel westPane=new JPanel(),eastPane=new JPanel();
westPane.setLayout(new BoxLayout(westPane,BoxLayout.Y_AXIS));
westPane.add(Box.createRigidArea(new Dimension(5,5)));
westPane.add(adapterPane);
westPane.add(Box.createRigidArea(new Dimension(0,10)));
westPane.add(promiscCheck);
westPane.add(Box.createRigidArea(new Dimension(0,10)));
westPane.add(filterPane);
westPane.add(Box.createVerticalGlue());
eastPane.add(Box.createRigidArea(new Dimension(5,5)));
eastPane.setLayout(new BoxLayout(eastPane,BoxLayout.Y_AXIS));
eastPane.add(caplenPane);
eastPane.add(Box.createRigidArea(new Dimension(5,30)));
eastPane.add(buttonPane);
eastPane.add(Box.createRigidArea(new Dimension(5,5)));
getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.X_AXIS));
getContentPane().add(Box.createRigidArea(new Dimension(10,10)));
getContentPane().add(westPane);
getContentPane().add(Box.createRigidArea(new Dimension(10,10)));
getContentPane().add(eastPane);
getContentPane().add(Box.createRigidArea(new Dimension(10,10)));
pack();
//setLocation(parent.getLocation().x+100,parent.getLocation().y+100);
}
public void actionPerformed(ActionEvent evt){
String cmd=evt.getActionCommand();
if(cmd.equals("Whole")){
caplenField.setText("1514");
caplenField.setEnabled(false);
}else if(cmd.equals("Head")){
caplenField.setText("68");
caplenField.setEnabled(false);
}else if(cmd.equals("Other")){
caplenField.setText("");
caplenField.setEnabled(true);
caplenField.requestFocus();
}else if(cmd.equals("OK")){
try{
int caplen=Integer.parseInt(caplenField.getText());
if(caplen<68 || caplen>1514){
JOptionPane.showMessageDialog(null,"捕获长度必须介于 68 和 1514之间");
return;
}
jpcap=JpcapCaptor.openDevice(devices[adapterComboBox.getSelectedIndex()],caplen,
promiscCheck.isSelected(),50);
if(filterField.getText()!=null && filterField.getText().length()>0){
jpcap.setFilter(filterField.getText(),true);
}
}catch(NumberFormatException e){
JOptionPane.showMessageDialog(null,"捕获长度必须是正整数");
}catch(java.io.IOException e){
JOptionPane.showMessageDialog(null,e.toString());
jpcap=null;
}finally{
dispose();
}
}else if(cmd.equals("Cancel")){
dispose();
}
}
public static JpcapCaptor getJpcap(JFrame parent){
new JCCCaptureDialog(parent).setVisible(true);
return jpcap;
}
public static void main( String args[] )
{
//JCCCaptureDialog.getJpcap(parent);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -