Новичок
Профиль
Группа: Участник
Сообщений: 4
Регистрация: 12.3.2010
Репутация: нет Всего: нет
|
Доброго времени суток. В среде NetBeans пытаюсь сделать подобие сниффера. Вот есть такая модель таблицы: Код | class DataModel extends AbstractTableModel { static ArrayList<Object[]> list = new ArrayList<Object[]>(); private final String[] HEADERS = {"№", "ПРотокол", "IP отправителя", "Порт отправителя", "IP получателя", "Порт получателя"}; private final int COLS = 6; private int rows = 0; static DataModel rr1 = new DataModel(); //JTable table; //static DataModel dataModel = new DataModel(); //JTable table = new JTable(dataModel);
public String getColumnName(int col) { return HEADERS[col]; } public int getRowCount() { return rows; } public int getColumnCount() { return COLS; } public Object getValueAt(int row, int col) { return list.get(row)[col]; } public void setValueAt(Object val, int row, int col) { list.get(row)[col] = val.toString(); fireTableDataChanged(); //обновление таблицы после изменений } public boolean isCellEditable(int row, int col) { return true; } public void addRow(int nomer, String protocol, String srcip, String srcport, String dstip, String dstport) { list.add(new String[COLS]); setValueAt(nomer, rows, 0); setValueAt(protocol, rows, 1); setValueAt(srcip, rows, 2); setValueAt(srcport, rows, 3); setValueAt(dstip, rows, 4); setValueAt(dstport, rows, 5); rows++; //fireTableDataChanged(); } public Class getColumnClass(int col) { switch (col) { case 0: return String.class; case 1: return String.class; case 2: return String.class; case 3: return String.class; case 4: return String.class; case 5: return String.class; } return null; } }
|
По нажатию на кнопку, мы получаем список сетевых интерфейсов, открываем нужный, принимаем 505 пакетов, попутно пишем лог, и пытаемся вывести данные в таблицу. Код | private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: jTable1.setModel(DataModel.rr1); NetworkInterface[] devices = JpcapCaptor.getDeviceList(); int temp = ((Integer)jSpinner1.getValue()); System.out.println(temp); try { JpcapCaptor captor=JpcapCaptor.openDevice(devices[temp], -1, false, 0); FileWriter fw = new FileWriter("ty.txt"); fw.write("Protocol\tsrc_ip\t\t\t\tport\t\tdst_ip\t\t\t\tport\n\n"); fw.close(); FileWriter fw1 = new FileWriter("levoe.txt"); fw1.close(); FileWriter fw2 = new FileWriter("levoe2.txt"); fw2.close(); String type1 = "jpcap.packet.UDPPacket"; String type2 = "jpcap.packet.TCPPacket"; String type3 = "jpcap.packet.ICMPPacket"; //String ip = ((String) jList1.getSelectedValue()); String ip = jTextField1.getText(); for (int i=0; i<505; i++){
Packet packet = captor.getPacket(); Class cl=packet.getClass(); System.out.println("класс " +cl.getName()); String type = cl.getName(); System.out.println("класс " +packet.getClass().getName()); if (type.equals(type1)){ //System.out.println("jpcap.packet.UDPPacket"); UDPPacket uDPacket = (UDPPacket) packet; String ip1 = uDPacket.src_ip.toString(); if (ip1.equals(ip) == false){ writeText.writeTextToFile("ty.txt", "UDP\t\t" +uDPacket.src_ip +"\t\t" +uDPacket.src_port +"\t\t" +uDPacket.dst_ip +"\t\t" +uDPacket.dst_port +"\n"); DataModel.rr1.addRow(i, "UDP", uDPacket.src_ip.toString(), Integer.toString(uDPacket.src_port), uDPacket.dst_ip.toString(), Integer.toString(uDPacket.dst_port)); //jTable1.setModel(DataModel.rr1); //jTable1.repaint(); } else { writeText.writeTextToFile("levoe2.txt", "UDP\t\t" +uDPacket.src_ip +"\t\t" +uDPacket.src_port +"\t\t" +uDPacket.dst_ip +"\t\t" +uDPacket.dst_port +"\n"); DataModel.rr1.addRow(i, "UDP", uDPacket.src_ip.toString(), Integer.toString(uDPacket.src_port), uDPacket.dst_ip.toString(), Integer.toString(uDPacket.dst_port)); //jTable1.setModel(DataModel.rr1); //jTable1.repaint(); } } else if (type.equals(type2)){ System.out.println("jpcap.packet.TCPPacket"); TCPPacket tCPPacket = (TCPPacket) packet; String ip1 = tCPPacket.src_ip.toString(); if (ip1.equals(ip) == false){ writeText.writeTextToFile("ty.txt", "TCP \t\t" +tCPPacket.src_ip +"\t\t" +tCPPacket.src_port +"\t\t" +tCPPacket.dst_ip +"\t\t" +tCPPacket.dst_port +"\n"); DataModel.rr1.addRow(i, "TCP", tCPPacket.src_ip.toString(), Integer.toString(tCPPacket.src_port), tCPPacket.dst_ip.toString(), Integer.toString(tCPPacket.dst_port)); } else { writeText.writeTextToFile("levoe2.txt", "TCP \t\t" +tCPPacket.src_ip +"\t\t" +tCPPacket.src_port +"\t\t" +tCPPacket.dst_ip +"\t\t" +tCPPacket.dst_port +"\n"); DataModel.rr1.addRow(i, "TCP", tCPPacket.src_ip.toString(), Integer.toString(tCPPacket.src_port), tCPPacket.dst_ip.toString(), Integer.toString(tCPPacket.dst_port)); } } else if (type.equals(type3)){ System.out.println("jpcap.packet.ICMPPacket"); ICMPPacket iCMPPacket = (ICMPPacket) packet; String ip1 = iCMPPacket.src_ip.toString(); if (ip1.equals(ip) == false){ DataModel.rr1.addRow(i, "ICMP", iCMPPacket.src_ip.toString(), String.valueOf(iCMPPacket.type) , iCMPPacket.dst_ip.toString(), ""); writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +iCMPPacket.type +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"\n"); if (0 == iCMPPacket.type){ writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"echo-reply" +"\n"); } else if (8 == iCMPPacket.type){ writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"echo" +"\n"); } else if (11 == iCMPPacket.type){ writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"ttl-exceeded" +"\n"); } else if (3 == iCMPPacket.type){ if (1 == iCMPPacket.code){ writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"host-unreachable" +"\n"); } else if (0 == iCMPPacket.code){ writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"net-unreachable" +"\n"); } else if (3 == iCMPPacket.code){ writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"port-unreachable" +"\n"); } else if (2 == iCMPPacket.code) { writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"protocol-unreachable" +"\n");
} else { writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"unreachable" +"\n"); } } else { writeText.writeTextToFile("ty.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +"\t\t" +iCMPPacket.dst_ip +"\t\t" +iCMPPacket.type +"\n"); } } else writeText.writeTextToFile("levoe.txt", "ICMP \t\t" +iCMPPacket.src_ip +"\t\t" +iCMPPacket.type +"\t\t" +iCMPPacket.dst_ip +"\t\t" +"\n"); } else { writeText.writeTextToFile("levoe.txt", cl.getName() +"\t\t" +packet.toString() +"\n"); DataModel.rr1.addRow(i, "PACKET", "", "", "", ""); } System.out.println(packet.toString() +"\n"+i); } captor.close(); } catch(IOException ex) { // Обрабатываем ошибку }
}
|
Но данные в таблице отобразятся только после завершения всего цикла, а надо что бы после каждого принятого пакета.
|