コード例 #1
0
 public TCPCopycatPacket(TCPCopycatHeader h, Byte[] d)
 {
     header = h;
     data   = d;
 }
コード例 #2
0
        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));
        }