package com.sprintwind.packetcapturetool; import java.text.SimpleDateFormat; import java.util.Date; import android.util.Log; public class PacketBrief implements ByteInitializer{ static final int PKT_PROTO_ARP = EtherHeader.ETH_PROTO_ARP; static final int PKT_PROTO_ICMP = IpHeader.IP_PROTO_ICMP; static final int PKT_PROTO_TCP = IpHeader.IP_PROTO_TCP; static final int PKT_PROTO_UDP = IpHeader.IP_PROTO_UDP; static final int PKT_PROTO_UNKOWN = 0x0; private TimeVal time; private MacAddress sourceMac; private MacAddress destMac; private IpAddress sourceIp; private IpAddress destIp; private int protocol; private int length; public String getTimeString(){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return formatter.format((long)this.time.sec*1000)+":"+this.time.uSec; } public MacAddress getSourceMac() { return sourceMac; } public void setSourceMac(MacAddress sourceMac) { this.sourceMac = sourceMac; } public MacAddress getDestMac() { return destMac; } public void setDestMac(MacAddress destMac) { this.destMac = destMac; } public IpAddress getSourceIp() { return sourceIp; } public void setSourceIp(IpAddress sourceIp) { this.sourceIp = sourceIp; } public IpAddress getDestIp() { return destIp; } public void setDestIp(IpAddress destIp) { this.destIp = destIp; } public int getProtocol() { return protocol; } public String getProtocolString() { int protocol = this.protocol&0xffff; switch(protocol) { case PKT_PROTO_ARP: return "ARP"; case PKT_PROTO_ICMP: return "ICMP"; case PKT_PROTO_TCP: return "TCP"; case PKT_PROTO_UDP: return "UDP"; default: return "UNKOWN("+String.format("0x%04x", protocol)+")"; } } public void setProtocol(short protocol) { this.protocol = protocol; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public PacketBrief() { super(); this.sourceMac = new MacAddress(); this.destMac = new MacAddress(); this.sourceIp = new IpAddress(); this.destIp = new IpAddress(); } public int initWithPcapPacket(PcapPacket packet){ this.time = packet.getPacketHeader().getTimeVal(); this.length = packet.getPacketHeader().getOriginLen(); return this.initWithByteArray(packet.getPacketContent(), 0); } @Override public int initWithByteArray(byte[] array, int start) { int newStart = start; EtherHeader etherHeader = new EtherHeader(); int error = etherHeader.initWithByteArray(array, newStart); if(ErrorCode.OK != error){ return error; } //etherHeader.print(); this.sourceMac = etherHeader.getSourceMac(); this.destMac = etherHeader.getDestMac(); newStart += EtherHeader.ETH_HDR_LEN; int protocol = etherHeader.getProtocol()&0xffff; switch(protocol){ case EtherHeader.ETH_PROTO_ARP: ArpHeader arpHeader = new ArpHeader(); error = arpHeader.initWithByteArray(array, newStart); if(ErrorCode.OK != error){ return error; } this.protocol = EtherHeader.ETH_PROTO_ARP; this.sourceIp = arpHeader.getSourceProtocolAddress(); this.destIp = arpHeader.getDestProtocolAddress(); break; case EtherHeader.ETH_PROTO_IP: IpHeader ipHeader = new IpHeader(); error = ipHeader.initWithByteArray(array, newStart); if(ErrorCode.OK != error){ return error; } this.protocol = (short) ipHeader.getProtocol(); this.sourceIp = ipHeader.getSourceIp(); this.destIp = ipHeader.getDestIp(); break; default: this.protocol = etherHeader.getProtocol(); } return ErrorCode.OK; } }