📄 jmain.java
字号:
package cn.myownlife.www;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import jpcap.packet.ARPPacket;
import jpcap.packet.ICMPPacket;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
import jpcap.packet.UDPPacket;
public class Jmain extends javax.swing.JFrame implements ActionListener{
//定义各个组建常量,变量
private JMenuItem exitMenuItem;
private JSeparator jSeparator2;
private JMenuItem saveMenuItem;
private JMenuItem getItem;
private JMenuItem stopMenuItem;
private JMenuItem startMenuItem;
private JMenu Menu;
private JMenuBar jMenuBar1;
static String []sql = new String[1000];// 保存每次抓到的包的INSERT语句
int n=0;//抓到的包数
JTable tabledisplay = null;
Vector rows,columns;
DefaultTableModel tabModel;
JScrollPane scrollPane;
JLabel statusLabel;
Captor captor = new Captor();
/*构造主函数*/
public static void main(String[]arg){
Jmain in = new Jmain();
in.setVisible(true);
}
/*初始化*/
public Jmain() {
super();
initGUI();
}
/*初始化图形界面*/
private void initGUI() {
setSize(400, 300);
{
jMenuBar1 = new JMenuBar();//初始化菜单
setJMenuBar(jMenuBar1);
{
Menu = new JMenu();
jMenuBar1.add(Menu);
Menu.setText("\u6293\u5305");
Menu.setPreferredSize(new java.awt.Dimension(35, 21));
{
startMenuItem = new JMenuItem();
Menu.add(startMenuItem);
startMenuItem.setText("开始");
startMenuItem.setActionCommand("start");
startMenuItem.addActionListener(this);//添加监听器
}
{
stopMenuItem = new JMenuItem();
Menu.add(stopMenuItem);
stopMenuItem.setText("停止");
stopMenuItem.setActionCommand("stop");
stopMenuItem.addActionListener(this);
}
{
saveMenuItem = new JMenuItem();
Menu.add(saveMenuItem);
saveMenuItem.setText("保存");
saveMenuItem.setActionCommand("save");
saveMenuItem.addActionListener(this);
}
{
getItem = new JMenuItem();
Menu.add(getItem);
getItem.setText("读取日志");
getItem.setActionCommand("get");
getItem.addActionListener(this);
}
{
jSeparator2 = new JSeparator();
Menu.add(jSeparator2);
}
{
exitMenuItem = new JMenuItem();
Menu.add(exitMenuItem);
exitMenuItem.setText("Exit");
exitMenuItem.setActionCommand("exit");
exitMenuItem.addActionListener(this);
}
}
}
rows=new Vector();//构造vector
columns= new Vector();
//把各个属性添加到Jtable
columns.addElement("包类型");
columns.addElement("数据报时间");
columns.addElement("源IP地址");
columns.addElement("目的IP地址");
columns.addElement("首部长度");
columns.addElement("数据长度");
columns.addElement("是否分段");
columns.addElement("分段偏移量");
columns.addElement("首部内容");
columns.addElement("数据内容");
tabModel=new DefaultTableModel();
tabModel.setDataVector(rows,columns);
tabledisplay = new JTable( tabModel );
scrollPane= new JScrollPane(tabledisplay);
this.getContentPane().add( new JScrollPane(tabledisplay),BorderLayout.CENTER);
statusLabel=new JLabel("作者 : lsupper; 更多信息请到 : http://www.myownlife.cn/");
this.getContentPane().add(statusLabel,BorderLayout.SOUTH);
}
/*为各个命令进行处理*/
public void actionPerformed(ActionEvent event) {
String cmd=event.getActionCommand();
if(cmd.equals("start")){
try {//异常处理
captor.capturePacketsFromDevice();//开始抓包
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
captor.setJFrame(this);
}
else if(cmd.equals("stop")){ // 停止抓包
captor.stopCapture();
}
else if(cmd.equalsIgnoreCase("save")) {
Save s = new Save();
try {
alert a = new alert();
boolean b = s.Saveit(sql,n);
if(b){
a.alerttrue();//保存成功调用alerttrue
}else {
a.alertfalse();//失败调用alertfalse
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(cmd.equals("get")) { //读取保存到数据库中的数据
try {
LinkDB l = new LinkDB();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(cmd.equals("exit")){ //退出
System.exit(0);
}
}
/*处理数据报*/
public void dealPacket( Packet packet )
{
try
{
Vector r=new Vector();
String strtmp,strtmp2;
//timestamp数据报的时间
Timestamp timestamp = new Timestamp((packet.sec * 1000) + (packet.usec / 1000));
String temp = ((IPPacket)packet).dont_frag == true ? "yes" : "no";
//把数据报的各个字段的内容添加到VECTOR中
r.addElement(gettype(packet)); //包类型
r.addElement(timestamp.toString()); //数据报时间
r.addElement(((IPPacket)packet).src_ip.toString()); //源IP地址
r.addElement(((IPPacket)packet).dst_ip.toString()); //目的IP地址
r.addElement( packet.header.length ); //首部长度
r.addElement( packet.data.length ); //数据长度
r.addElement(temp); //是否不分段
r.addElement( ((IPPacket)packet).offset ); //数据长度
strtmp = "";
for(int i=0;i<packet.header.length;i++){
strtmp += Byte.toString(packet.header[i]);
}
r.addElement(strtmp); //首部内容
strtmp2 = "";
for(int i=0;i<packet.data.length;i++){
strtmp2 += Byte.toString(packet.data[i]);
}
r.addElement(strtmp2); //数据内容
//由数据包各个字段组成SQL语句
//把SQL语句存入SQL数组中
sql[n] ="INSERT INTO packets VALUES ('"
+gettype(packet)+"','"
+timestamp.toString()+"','"
+((IPPacket)packet).src_ip.toString()+"','"
+((IPPacket)packet).dst_ip.toString()+"',"
+packet.header.length+","
+packet.data.length+",'"
+temp+"',"
+((IPPacket)packet).offset+",'"
+strtmp+"','"
+strtmp2+"'"
+");";
rows.addElement(r);
tabledisplay.addNotify();
n++;
}
catch( Exception e) {
}
}
/*返回抓到的包的类型*/
public String gettype(Packet p) {
String type = "other";
if(p instanceof ARPPacket){ //是否是ARP包
type="ARP";
}else if(p instanceof IPPacket) { //是否是IP包
if((IPPacket)p instanceof TCPPacket){ //是否是TCP包
type="TCP";
}else if(p instanceof UDPPacket){ //是否是UDP包
type="UDP";
}else if(p instanceof ICMPPacket){ //是否是ICMP包
type="ICMP";
}
}
return type;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -