📄 mainfrm.java
字号:
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 + -