帮忙看一看代码,很迷惘,望不吝赐教。

来源:互联网 发布:机加工工艺软件 编辑:程序博客网 时间:2024/05/19 02:24
代码如下
import java.awt.BorderLayout;
import java.awt.FlowLayout;
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.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.PacketReceiver;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class MainFrame extends javax.swing.JFrame implements ActionListener{
    private JPanel showPanel;
    private JScrollPane jScrollPane;
    private JButton stop;
    private JTable jTable1;
    private JButton start;
    private JTable jTable;
    private JScrollPane jScrollPane3;
    private JPanel buttonPanel;
    Vector rows,columns;
    static JpcapCaptor captor=null;
   
   
    /**
    * Auto-generated main method to display this JFrame
    */
    public static void main(String[] args) {
        MainFrame inst = new MainFrame();
        inst.setVisible(true);
    }
   
    public MainFrame() {
        super();
        initGUI();
    }
    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            {
                showPanel = new JPanel();
                FlowLayout showPanelLayout = new FlowLayout();
                showPanel.setLayout(showPanelLayout);
                getContentPane().add(showPanel, BorderLayout.NORTH);
                showPanel.setPreferredSize(new java.awt.Dimension(392, 184));
                {
                    jScrollPane = new JScrollPane();
                    showPanel.add(jScrollPane);
                    jScrollPane.setPreferredSize(new java.awt.Dimension(493, 192));
                    {
                         rows=new Vector();
                         columns= new Vector();
                       
                         columns.addElement("数据报时间");
                         columns.addElement("源IP地址");
                         columns.addElement("目的IP地址");
                         columns.addElement("首部长度");
                         columns.addElement("数据长度");
                         columns.addElement("是否分段");
                         columns.addElement("分段偏移量");
                         columns.addElement("首部内容");
                         columns.addElement("数据内容");
                        DefaultTableModel jTableModel = new DefaultTableModel();
                        jTableModel.setDataVector(rows,columns);
                        jTable = new JTable();
                        jScrollPane.setViewportView(jTable);
                        jTable.setModel(jTableModel);
                        jTable.getTableHeader().setBounds(0, 0, 147, 28);
                    }
                }
                {
                    jScrollPane3 = new JScrollPane();
                    showPanel.add(jScrollPane3);
                    jScrollPane3.setPreferredSize(new java.awt.Dimension(185, 192));
                    {
                        rows=new Vector();
                         columns= new Vector();
                       
                         columns.addElement("基于web捕获用户名口令字");
                       
                        DefaultTableModel jTable1Model = new DefaultTableModel();
                jTable1Model.setDataVector(rows,columns);
                        jTable1 = new JTable();
                        jScrollPane3.setViewportView(jTable1);
                        jTable1.setModel(jTable1Model);
                    }
                }
            }
            {
                buttonPanel = new JPanel();
                getContentPane().add(buttonPanel, BorderLayout.SOUTH);
                buttonPanel.setPreferredSize(new java.awt.Dimension(752, 80));
                {
                    start = new JButton();
                    buttonPanel.add(start);
                    start.setText("/u6293/u5305");
                    start.setPreferredSize(new java.awt.Dimension(64, 28));
                    start.setActionCommand("start");
                    start.addActionListener(this);
                }
                {
                    stop = new JButton();
                    buttonPanel.add(stop);
                    stop.setText("/u505c/u6b62");
                    stop.setBounds(-13, -64, 56, 22);
                    stop.setPreferredSize(new java.awt.Dimension(64, 28));
                    stop.addActionListener(this);
                    stop.setActionCommand("stop");
                }
            }
            pack();
            this.setSize(760, 371);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public JpcapCaptor initial() throws IOException{
        NetworkInterface[] devices=JpcapCaptor.getDeviceList();
        int index=1;
    JpcapCaptor captor=JpcapCaptor.openDevice(devices[index],65535, true,20);
    return captor;}
    public void deal() throws IOException{
    PacketReceiver handler=new PacketReceiver(){
                public void receivePacket(Packet packet) {
                       //System.out.println(packet);
              
                
                    dealPacket(packet);
                }
                };
         initial();
         captor.processPacket(1, handler);}
       
   

    public void dealPacket( Packet packet )
     {
            try
            {
                   Vector r=new Vector();
                   String strtmp;
                   Timestamp timestamp = new Timestamp((packet.sec * 1000) + (packet.usec / 1000));
                 
                   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( ((IPPacket)packet).dont_frag == true ? "分段" : "不分段" );                          //是否不分段
                   r.addElement( ((IPPacket)packet).offset );          //数据长度
   
                   strtmp = "";
                   for(int i=0;i<packet.header.length;i++){           
                          strtmp += Byte.toString(packet.header[i]);
                   }
                   r.addElement(strtmp);    //首部内容
   
                   strtmp = "";
                   for(int i=0;i<packet.data.length;i++){        
                          strtmp += Byte.toString(packet.data[i]);
                   }
                   r.addElement(strtmp);    //数据内容
                                                    
                   rows.addElement(r);
                  jTable.addNotify();
            }
            catch( Exception e)
            {
                 
            }
     }
    private Thread captureThread;
   
    private void startCaptureThread(){
         
        
           captureThread = new Thread(new Runnable(){
                  public void run(){
                         while(captureThread != null){
                             try {
                                deal();
                            } catch (IOException e) {
                               
                                e.printStackTrace();
                            }
                           
                         }
                  }
           });
          
           captureThread.setPriority(Thread.MIN_PRIORITY);
           captureThread.start();
    }
   
  
    void stopcaptureThread(){
           captureThread = null;
    }
  
    public void stopCapture(){
           System.out.println(2);
           stopcaptureThread();
    }
   
     public void sortPacket(TCPPacket packet){
         Vector r=new Vector();
         PacketPrinter a=null;
         r.addElement(a.passwdsneak(packet));
         jTable1.addNotify();}

    public void actionPerformed(ActionEvent e) {
        String cmd=e.getActionCommand();
       
        if(cmd.equals("start")){
            startCaptureThread();  
        }
        else if(cmd.equals("stop")){
            stopcaptureThread();
        }
       
    }
    }
错误如下
Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 1
    at MainFrame.initial(MainFrame.java:145)
    at MainFrame.deal(MainFrame.java:156)
    at MainFrame$2.run(MainFrame.java:206)
    at java.lang.Thread.run(Unknown Source)
编译时无错误,一运行就出现错误,望不吝赐教。我已经困扰很久了。