public class tcp extends packet { int sourcePort = 0; // Quellport-Nr. int destPort = 0; // Zielport-Nr. long seqNo = 0; // SYN-Sequenznummer long ackNo = 0; // ACK-Sequenznummer int dataOffset = 0; // Payload-Offset boolean syn = false; // Verbindungsflags boolean ack = false; boolean fin = false; int window = 0; // TCP-Fensterindex int checksum = 0; // Paketchecksumme String payload = new String(); // Daten public tcp(ip ipPacket, byte b[]) { int position = ipPacket.getPayloadOffset(); // Parsing entsprechend RFC 793, siehe [4] sourcePort = getWord(position,b); position+=2; destPort = getWord(position,b); position+=2; seqNo = getLong(position,b); position+=4; ackNo = getLong(position,b); position+=4; dataOffset = (getByte(position,b) & 0xF0) >> 4; position++; syn = (getByte(position,b) & 0x02) == 0x02 ? true : false; ack = (getByte(position,b) & 0x10) == 0x10 ? true : false; fin = (getByte(position,b) & 0x01) == 0x10 ? true : false; window = getWord(++position,b); checksum = getWord(++position,b); int payloadBegin = ipPacket.getPayloadOffset() + dataOffset*4; int payloadLength = ipPacket.getLength() - payloadBegin; if (payloadLength > 0) { payload = new String(b, payloadBegin, payloadLength); } else { payload = ""; } } public String headerString() { String packetString = new String("Source port: "+sourcePort+"\nDestination Port: "+destPort); packetString += "\nSequence No: "+seqNo+"\nAck No: "+ackNo; packetString += "\nSYN: "+syn+" ACK: "+ack+" FIN:"+fin; packetString += "\nWindow: "+window; packetString += "\nData Offset: "+dataOffset; return packetString; } public String payloadString() { return payload; } }