Esempio n. 1
0
        /// <summary>
        /// Creates a new instance of this class by parsing the given data
        /// </summary>
        /// <param name="bData">The byte array to parse</param>
        public TCPFrame(byte[] bData)
        {
            int iDataOffset; //In bits.

            iSourcePort           = bData[0] * 256 + bData[1];
            iDestinationPort      = bData[2] * 256 + bData[3];
            iSequenceNumber       = (uint)(bData[4] * (uint)(256 * 256 * 256) + bData[5] * (uint)(256 * 256) + bData[6] * (uint)256 + bData[7]);
            iAcknowledgmentNumber = (uint)(bData[8] * (uint)(256 * 256 * 256) + bData[9] * (uint)(256 * 256) + bData[10] * (uint)256 + bData[11]);
            iDataOffset           = (int)((bData[12] & 0xF0) >> 4) * 4;

            if (iDataOffset < 20)
            {
                throw new ArgumentException("Invalid packet header");
            }

            bUrgent          = (bData[13] & 0x20) > 0;
            bAcknowledgement = (bData[13] & 0x10) > 0;
            bPush            = (bData[13] & 0x8) > 0;
            bReset           = (bData[13] & 0x4) > 0;
            bSynchronize     = (bData[13] & 0x2) > 0;
            bFinish          = (bData[13] & 0x1) > 0;
            iWindow          = bData[14] * (uint)256 + bData[15];
            bChecksum        = new byte[2];
            bChecksum[0]     = bData[16];
            bChecksum[1]     = bData[17];
            iUrgentPointer   = bData[18] * (uint)256 + bData[19];

            byte[] bOptions = new byte[iDataOffset - 20];

            for (int iC1 = 20; iC1 < iDataOffset; iC1++)
            {
                bOptions[iC1 - 20] = bData[iC1];
            }

            this.oOptions = new TCPOptions(bOptions);

            byte[] bEncapsulatedData = new byte[bData.Length - iDataOffset];

            for (int iC1 = iDataOffset; iC1 < bData.Length; iC1++)
            {
                bEncapsulatedData[iC1 - iDataOffset] = bData[iC1];
            }

            this.fEncapsulatedFrame = new RawDataFrame(bEncapsulatedData);
        }
Esempio n. 2
0
 /// <summary>
 /// Creates a new empty instance of this class
 /// </summary>
 public TCPFrame()
 {
     iSourcePort           = 0;
     iDestinationPort      = 0;
     iSequenceNumber       = 0;
     iAcknowledgmentNumber = 0;
     bUrgent            = false;
     bAcknowledgement   = false;
     bPush              = false;
     bReset             = false;
     bSynchronize       = false;
     bFinish            = false;
     iWindow            = 0;
     bChecksum          = new byte[2];
     iUrgentPointer     = 0;
     oOptions           = new TCPOptions();
     fEncapsulatedFrame = null;
 }