public TCPCopycatPacket(TCPCopycatHeader h, Byte[] d) { header = h; data = d; }
public static TCPCopycatPacket parse(Byte[] byteData) { if (byteData.Length >= MAXIMUM_PACKET_SIZE) { throw new Exception("Data lenght must be lower than 1500 byte"); } #region HeaderParsing TCPCopycatHeader header = new TCPCopycatHeader(); int offset = 0; /* header.dataLenght ************/ header.dataLenght = 0; for (int i = 0; i < sizeof(int); ++i) { header.dataLenght = header.dataLenght << 8; header.dataLenght += byteData[i + offset]; } offset += sizeof(int); /* header.sequenceNumber ********/ header.sequenceNumber = 0; for (int i = 0; i < sizeof(int); ++i) { header.sequenceNumber = header.sequenceNumber << 8; header.sequenceNumber += byteData[i + offset]; } offset += sizeof(int); /* header.acknowledgeNumber ********/ header.acknowledgeNumber = 0; for (int i = 0; i < sizeof(int); ++i) { header.acknowledgeNumber = header.acknowledgeNumber << 8; header.acknowledgeNumber += byteData[i + offset]; } offset += sizeof(int); /* header.windowSize ********/ header.windowSize = 0; for (int i = 0; i < sizeof(Int16); ++i) { header.windowSize = (Int16)(header.windowSize << 8); header.windowSize += byteData[i + offset]; } offset += sizeof(Int16); /* header.options ********/ header.options = 0; for (int i = 0; i < sizeof(Int16); ++i) { header.options = (Int16)(header.options << 8); header.options += byteData[i + offset]; } offset += sizeof(Int16); /* header.OPT ********/ header.OPT = 0; for (int i = 0; i < sizeof(byte); ++i) { header.OPT = (byte)(header.OPT << 8); header.OPT += byteData[i + offset]; } offset += sizeof(byte); /* header.ACK ********/ header.ACK = 0; for (int i = 0; i < sizeof(byte); ++i) { header.ACK = (byte)(header.ACK << 8); header.ACK += byteData[i + offset]; } offset += sizeof(byte); /* header.SYN ********/ header.SYN = 0; for (int i = 0; i < sizeof(byte); ++i) { header.SYN = (byte)(header.SYN << 8); header.SYN += byteData[i + offset]; } offset += sizeof(byte); /* header.FIN ********/ header.FIN = 0; for (int i = 0; i < sizeof(byte); ++i) { header.FIN = (byte)(header.FIN << 8); header.FIN += byteData[i + offset]; } offset += sizeof(byte); #endregion #region DataParsing Byte[] data = new byte[header.dataLenght]; for (int i = 0; i < data.Length; ++i) //parsing data { data[i] = byteData[i + offset]; } #endregion return(new TCPCopycatPacket(header, data)); }