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

📄 jmain.java

📁 利用第三方API JPCAP进行开发出来的网络抓包程序
💻 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 + -