⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcccapturedialog.java

📁 用javaJPcapWinpcap协议分析
💻 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 + -