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

📄 mainfrm.java

📁 基于Jpcap开发的流量监控软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package joel.ethernettools;
/**
 * THIS IS THE MAIN-FRAME CLASS.
 * CONTROLS THE GUI AND USER ACTIONS.
 */
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class MainFrm extends JFrame implements ActionListener {
	private PacketHandler packetHandler;
	private MsgLogger logger;
	private MsgProvider msgProvider;
	private JLabel lbl_PacketPool_Packet,lbl_PacketPool_OriginalPacket,lbl_PacketPool_ProcessedPacket;
	private JLabel[] lbl_PacketLogger_OriPacketStack,lbl_PacketLogger_PrsdPacketStack,lbl_PacketLogger_PrsdPacketReceived,lbl_PacketLogger_OriPacketReceived;
	private JLabel[] lbl_PrsPacket_Fetched,lbl_PrsPacket_Analyzed;
	private JLabel lbl_MySQL_Status,lbl_MySQL_OriPacketSaved,lbl_MySQL_PrsPacketSaved;
	private JLabel lbl_TotalPacketReceived;
	private JProgressBar pgb_MemoryUsage,pgb_CurrentSpeedrateInKB;
	private NIC nic;
	private PacketLogger packetLogger[];
	private PacketAnalyzer packetAnalyzer[];
	private PacketPool pool=new PacketPool();
	private JPanel p_Center;
	private static final String TOTAL_PACKET_RECEIVED="TOTAL PACKET RECEIVED: ";	
	private final static int MAX_MEMORY=(int)Runtime.getRuntime().maxMemory()/1048576;
	private static final int MAXIUM_SPEED_IN_KB_10MBIT=10240,MAXIUM_SPEED_IN_KB_100MBIT=102400,MAXIUM_SPEED_IN_KB_1GBIT=1048576;
	private static final String PROGRESSBAR_STRING="/"+MAX_MEMORY+"M";
	private static final String PROGRESSBAR_MAXSPEED_STRING="K/S";
	private Thread[] PacketLogThread,PacketAnalyzeThread;
	private MySQLOperator operator;
	private int maxiumSpeedInKB=MainFrm.MAXIUM_SPEED_IN_KB_100MBIT,packetAnalyzerThreads=3,packetLoggerThreads=3,labelUpdaterRefreshRate=2;
	
	private void setMaxiumSpeedInKB(String speedString) {
		if(speedString.equals("10M/S"))
			this.maxiumSpeedInKB = MainFrm.MAXIUM_SPEED_IN_KB_10MBIT;
		else if(speedString.equals("100M/S"))
			this.maxiumSpeedInKB = MainFrm.MAXIUM_SPEED_IN_KB_100MBIT;
		else if(speedString.equals("1G/S"))
			this.maxiumSpeedInKB = MainFrm.MAXIUM_SPEED_IN_KB_1GBIT;
		pgb_CurrentSpeedrateInKB.setMaximum(this.maxiumSpeedInKB);
	}

	private void setPacketAnalyzerThreads(int packetAnalyzerThreads) {
		this.packetAnalyzerThreads = packetAnalyzerThreads;
	}

	private void setPacketLoggerThreads(int packetLoggerThreads) {
		this.packetLoggerThreads = packetLoggerThreads;
	}

	private void setLabelUpdaterRefreshRate(int labelUpdaterRefreshRate) {
		this.labelUpdaterRefreshRate = labelUpdaterRefreshRate;
	}

	public MainFrm() {
		super("MAINFRAME");
		JButton btn_Recorder = new JButton("RECORDER");
		JButton btn_Exit = new JButton("EXIT");
		JButton btn_PacketLogger = new JButton("PACKET-LOGGER");
		JButton btn_PacketAnalyzer = new JButton("PACKET-ANALYZER");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.getContentPane().setLayout(new BorderLayout());
		pgb_MemoryUsage=new JProgressBar();
		pgb_MemoryUsage.setStringPainted(true);
		pgb_MemoryUsage.setString("0"+MainFrm.PROGRESSBAR_STRING);
		pgb_MemoryUsage.setMaximum(MainFrm.MAX_MEMORY);
		pgb_MemoryUsage.setValue(0);
		pgb_CurrentSpeedrateInKB=new JProgressBar();
		pgb_CurrentSpeedrateInKB.setStringPainted(true);
		pgb_CurrentSpeedrateInKB.setMaximum(this.maxiumSpeedInKB);
		pgb_CurrentSpeedrateInKB.setString("0"+MainFrm.PROGRESSBAR_MAXSPEED_STRING);
		pgb_CurrentSpeedrateInKB.setValue(0);
		lbl_TotalPacketReceived=new JLabel(MainFrm.TOTAL_PACKET_RECEIVED+"0",SwingConstants.CENTER);
		JPanel p_North=new JPanel(new GridLayout(3,1));
		p_North.add(pgb_MemoryUsage);
		p_North.add(pgb_CurrentSpeedrateInKB);
		p_North.add(lbl_TotalPacketReceived);
		this.getContentPane().add(p_North,BorderLayout.NORTH);
		p_Center=new JPanel(new GridLayout(2,2));
		p_Center.add(this.initPacketPoolPanel());
		p_Center.add(this.initMySQLStatusPanel());
		this.getContentPane().add(p_Center, BorderLayout.CENTER);
		JPanel p_South = new JPanel(new GridLayout(1, 5));
		this.getContentPane().add(p_South, BorderLayout.SOUTH);
		p_South.add(btn_Recorder);
		p_South.add(btn_PacketLogger);
		p_South.add(btn_PacketAnalyzer);
		p_South.add(btn_Exit);
		btn_Recorder.setActionCommand("RECORDER_ACTION");
		btn_Recorder.addActionListener(this);
		btn_Exit.addActionListener(this);
		btn_PacketLogger.addActionListener(this);
		btn_PacketAnalyzer.addActionListener(this);
		pack();
//		this.setResizable(false);
		logger = new MsgLogger();
		msgProvider = new MsgProvider();
		msgProvider.addMsgReceiver(logger);
		msgProvider.addNewMsg("MAINFRAME INIT DONE.");
		nic = new NIC(logger);
		packetHandler = new PacketHandler(logger);
		packetHandler.setPacketPool(pool);
	}

	private JPanel initPacketPoolPanel() {
		JPanel panel = new JPanel(new GridLayout(3,2));
		lbl_PacketPool_Packet=new JLabel("0",SwingConstants.CENTER);
		lbl_PacketPool_OriginalPacket=new JLabel("0",SwingConstants.CENTER);
		lbl_PacketPool_ProcessedPacket=new JLabel("0",SwingConstants.CENTER);
		panel.setBorder(BorderFactory.createTitledBorder("PACKET POOL"));
		panel.add(new JLabel("PACKET IN POOL: "));
		panel.add(lbl_PacketPool_Packet);
		panel.add(new JLabel("ORIGINAL PACKET IN POOL: "));
		panel.add(lbl_PacketPool_OriginalPacket);
		panel.add(new JLabel("PROCESSED PACKET IN POOL: "));
		panel.add(lbl_PacketPool_ProcessedPacket);
		return panel;
	}
	private JPanel initPacketLoggerPanel(int threadcount){
		JPanel panel=new JPanel(new GridLayout(threadcount*4,2));
		panel.setBorder(BorderFactory.createTitledBorder("PACKET LOGGER"));
		lbl_PacketLogger_OriPacketStack=new JLabel[threadcount];
		lbl_PacketLogger_PrsdPacketStack=new JLabel[threadcount];
		lbl_PacketLogger_PrsdPacketReceived=new JLabel[threadcount];
		lbl_PacketLogger_OriPacketReceived=new JLabel[threadcount];
		for(int i=0;i<threadcount;i++){
			lbl_PacketLogger_OriPacketStack[i]=new JLabel("0",SwingConstants.CENTER);
			lbl_PacketLogger_PrsdPacketStack[i]=new JLabel("0",SwingConstants.CENTER);
			lbl_PacketLogger_PrsdPacketReceived[i]=new JLabel("0",SwingConstants.CENTER);
			lbl_PacketLogger_OriPacketReceived[i]=new JLabel("0",SwingConstants.CENTER);
			panel.add(new JLabel(PacketLogThread[i].getName()+" ORGN-PKT CURRENT STACK: "));
			panel.add(lbl_PacketLogger_OriPacketStack[i]);
			panel.add(new JLabel(PacketLogThread[i].getName()+" ORGN-PKT LOGGED: "));
			panel.add(lbl_PacketLogger_OriPacketReceived[i]);
			panel.add(new JLabel(PacketLogThread[i].getName()+" PRSD-PKT CURRENT STACK: "));
			panel.add(lbl_PacketLogger_PrsdPacketStack[i]);
			panel.add(new JLabel(PacketLogThread[i].getName()+" PRSD-PKT LOGGED: "));
			panel.add(lbl_PacketLogger_PrsdPacketReceived[i]);
		}		
		return panel;
	}
	private JPanel initPacketAnalyzerPanel(int threadcount){
		JPanel panel=new JPanel(new GridLayout(threadcount*2,2));
		panel.setBorder(BorderFactory.createTitledBorder("PACKET ANALYZER"));
		lbl_PrsPacket_Fetched=new JLabel[threadcount];
		lbl_PrsPacket_Analyzed=new JLabel[threadcount];
		for(int i=0;i<threadcount;i++){
			lbl_PrsPacket_Fetched[i]=new JLabel("0",SwingConstants.CENTER);
			lbl_PrsPacket_Analyzed[i]=new JLabel("0",SwingConstants.CENTER);
			panel.add(new JLabel(PacketAnalyzeThread[i].getName()+" FETCHED: "));
			panel.add(lbl_PrsPacket_Fetched[i]);
			panel.add(new JLabel(PacketAnalyzeThread[i].getName()+" ANALYZED: "));
			panel.add(lbl_PrsPacket_Analyzed[i]);
		}
		return panel;
	}
	private JPanel initMySQLStatusPanel(){
		JPanel panel=new JPanel(new GridLayout(3,2));
		panel.setBorder(BorderFactory.createTitledBorder("MYSQL STATUS"));
		lbl_MySQL_Status=new JLabel("OFFLINE",SwingConstants.CENTER);
		lbl_MySQL_OriPacketSaved=new JLabel("0",SwingConstants.CENTER);
		lbl_MySQL_PrsPacketSaved=new JLabel("0",SwingConstants.CENTER);
		panel.add(new JLabel("MYSQL STATUS: "));
		panel.add(lbl_MySQL_Status);
		panel.add(new JLabel("ORIGINAL PACKET SAVED: "));
		panel.add(lbl_MySQL_OriPacketSaved);
		panel.add(new JLabel("PROCESSED PACKET SAVED: "));
		panel.add(lbl_MySQL_PrsPacketSaved);
		return panel;
	}
	private void startLogPacket(int logThread, boolean enableOriginalPacketLog,
			boolean enableProcessedPacketLog) {
		operator=new MySQLOperator();
		packetLogger = new PacketLogger[logThread];
		PacketLogThread=new Thread[logThread];
		for (int i = 0; i < logThread; i++) {
			packetLogger[i] = new PacketLogger(enableOriginalPacketLog,
					enableProcessedPacketLog);
			packetLogger[i].setPacketPool(this.pool);
			packetLogger[i].setSaveEveryManyPackets(15);
			packetLogger[i].setMsgReceiver(logger);
			PacketLogThread[i]=new Thread(packetLogger[i]);
			PacketLogThread[i].setName("LOGGER "+(i+1));
			PacketLogThread[i].start();
		}
	}
	private void startAnalyzePacket(int threadcount){
		packetAnalyzer = new PacketAnalyzer[threadcount];
		PacketAnalyzeThread=new Thread[threadcount];
		for(int i=0;i<threadcount;i++){
			packetAnalyzer[i]=new PacketAnalyzer();			
			packetAnalyzer[i].setPacketPool(this.pool);
			packetAnalyzer[i].setMsgReceiver(this.logger);
			PacketAnalyzeThread[i]=new Thread(packetAnalyzer[i]);
			PacketAnalyzeThread[i].setName("ANALYZER "+(i+1));
			PacketAnalyzeThread[i].start();
		}
	}
	
	@Override
	public void actionPerformed(ActionEvent arg) {
		String temp = arg.getActionCommand();
		if (temp.equals("RECORDER_ACTION")) {
			logger.setVisible(!logger.isVisible());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -