public class ip extends packet { final int offset_type[] = // Anfagsoffset des Datagramms {4,14,-1,-1,-1,-1,22,-1,16,4,21,8,0,24,24}; int dlt = 0; // Datalink-Type int payloadOffset; // Payload-Zeiger int version = 0; // Headerversion int headerLength = 0; // Headerlänge in Byte int tos = 0; // Type of Service int length = 0; // gesamte Paketlänge in Byte int id = 0; // Paketnummer boolean dontFragment = false; // Fragmentierungsflags boolean moreFragments = false; int fragmentOffset = 0; // Offset des Paketfragments int ttl = 0; // Time to Live int protocol = 0; // Protokoll des Payloads int checksum = 0; // Header-Checksumme int source1 = 0; // Quelladresse int source2 = 0; int source3 = 0; int source4 = 0; int dest1 = 0; // Zieladresse int dest2 = 0; int dest3 = 0; int dest4 = 0; public ip(byte b[],int dataLinkType) { int position = offset_type[dataLinkType]; dlt = dataLinkType; // Parsing entsprechend RFC 791, siehe [3] version = ( getByte(position,b) & 0xF0 ) >> 4; headerLength = ( getByte(position,b) & 0x0F ) * 4; payloadOffset = position + headerLength; tos = getByte(++position,b); length = getWord(++position,b); position+=2; id = getWord(position,b); position+=2; dontFragment = (getByte(position,b) & 0x40) == 0x40 ? true : false; moreFragments = (getByte(position,b) & 0x20) == 0x20 ? true : false; fragmentOffset = getWord(position,b) & 0x1FFF; position+=2; ttl = getByte(position,b); protocol = getByte(++position,b); checksum = getWord(++position,b); position+=2; source1 = getByte(position,b); source2 = getByte(++position,b); source3 = getByte(++position,b); source4 = getByte(++position,b); dest1 = getByte(++position,b); dest2 = getByte(++position,b); dest3 = getByte(++position,b); dest4 = getByte(++position,b); } public String headerString() { String packetString = new String("Version: "+version+"\nHeader Length: "+headerLength); packetString += "\nDatagram Length: "+length+"\nDatagram ID: "+id; packetString += "\nDontFragment: "+dontFragment+"\nMoreFragments: "+moreFragments; packetString += "\nFragmentOffset: "+fragmentOffset+"\nTime to Live: "+ttl; packetString += "\nProtocol: "+protocol; packetString += "\nSource: "+source1+"."+source2+"."+source3+"."+source4; packetString += "\nDestination: "+dest1+"."+dest2+"."+dest3+"."+dest4; return packetString; } public int getPayloadOffset() { return payloadOffset; } public int getLength() { return length; } }