50,543
社区成员
发帖
与我相关
我的任务
分享
private int ID;//数据包序号
private String protocol;//数据包协议
private String src_ip;//源地址
private String des_ip;//目标地址
private Date sendTime;//数据包发送时间
private String sendTimeString;//
private int packetSize;//包大小
private String src_MAC;//源MAC地址
private String des_MAC;//目标MAC地址
public class PacketTableModel extends AbstractTableModel {
private PacketTableData tableData;// 用于存储数据包列表中的一行数据
static int i = 0;
protected Vector<PacketTableData> packetData;
String[] columnNames = { new String("NO"),
new String("协议"), new String("源地址"), new String("目的地址"),
new String("发送时间"), new String("包大小"), new String("源MAC地址"),
new String("目标MAC地址") };
public PacketTableModel(){
this.tableData = new PacketTableData();
packetData = new Vector<PacketTableData>();
}
public PacketTableData getTableData() {
return tableData;
}
public void setTableData(PacketTableData tableData) {
this.tableData = tableData;
}
// 处理数据包,并初始化tableData
public void processPacket(Packet packet) {
System.out.println("rowsize: "+rowsize);
int id = i++;
//设置ID
tableData.setID(id);
// 包大小
tableData.setPacketSize(packet.len);
//设置时间
Date curDate = new Date(System.currentTimeMillis());
tableData.setSendTime(curDate);
//获取MAC地址
EthernetPacket ePacket = (EthernetPacket)packet.datalink;
String src_mac = ePacket.src_mac.toString();
String des_mac = ePacket.dst_mac.toString();
tableData.setSrc_MAC(src_mac);
tableData.setDes_MAC(des_mac);
//分析ARP协议
if(packet instanceof ARPPacket){
//设置协议
tableData.setProtocol("ARP");
ARPPacket aPacket = (ARPPacket)packet;
//初始化IP
String src_ip = aPacket.getSenderProtocolAddress().toString();
String des_ip = aPacket.getTargetProtocolAddress().toString();
tableData.setSrc_ip(src_ip);
tableData.setDes_ip(des_ip);
}
//分析ICMP协议
if(packet instanceof ICMPPacket){
ICMPPacket iPacket = (ICMPPacket)packet;
//设置协议
tableData.setProtocol("ICMP");
//初始化IP
String src_ip = iPacket.src_ip.toString();
String des_ip = iPacket.dst_ip.toString();
tableData.setSrc_ip(src_ip);
tableData.setDes_ip(des_ip);
}
//分析IP
if(packet instanceof IPPacket){
IPPacket iPacket = (IPPacket)packet;
String src_ip = iPacket.src_ip.toString();
String des_ip = iPacket.dst_ip.toString();
tableData.setSrc_ip(src_ip);
tableData.setDes_ip(des_ip);
//UDP
if(iPacket instanceof UDPPacket){
//设置协议信息
tableData.setProtocol("UDP");
}
if(iPacket instanceof TCPPacket){
//设置协议信息
tableData.setProtocol("TCP");
}
}
}
// 往数据包列表中添加一行数据
//int row = 0;
public void addRow(PacketTableData tableData,Vector<Packet> packets) {
//packets参数是之前另作他用的
packetData.addElement(tableData);
fireTableDataChanged();
}
public int getColumnCount() {
// TODO 自动生成方法存根
return columnNames.length;
}
public int getRowCount() {
// TODO 自动生成方法存根
return packetData.size();
}
public Object getValueAt(int row, int column) {
// TODO 自动生成方法存根
return packetData.elementAt(row);
}
public String getColumnName(int column){
if(column==0) return "No.";
return columnNames[column];
}
//单元不可编辑
public boolean isCellEditable(int row, int column) {
return false;
}
}
PacketTableModel tableModel = new PacketTableModel();
packetTable = new JTable(tableModel);
packetTable.setPreferredScrollableViewportSize(new Dimension(500, 70));
packetTable.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(packetTable);
JPanel panel = new JPanel();
panel.add(scrollPane);
scrollPane.setPreferredSize(new java.awt.Dimension(1081, 208));
panel.setOpaque(true);
jPanel3.add(panel, BorderLayout.CENTER);
private PacketReceiver handler=new PacketReceiver(){
public void receivePacket(final Packet packet) {
packets.add(packet);
PacketTableModel tableModel = (PacketTableModel)packetTable.getModel();
tableModel.processPacket(packet);
//获取tableData
PacketTableData tableData = tableModel.getTableData();
//插入数据包列表
tableModel.addRow(tableData,packets);
}
};
public Object getValueAt(int row, int column) {
// TODO 自动生成方法存根
return packetData.elementAt(row);
}
这里取的都是PacketTableData的对象。默认的就是包名.类名@内存地址。楼主应该是要单元格上每个cell显示的是PacketTableData对象里的对应的每个属性值才对
public Object getValueAt(int row, int column) {
// TODO 自动生成方法存根
return packetData.elementAt(row);
}