Beispiel #1
0
        /// <summary>
        /// Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        /// A <see cref="TransportChecksumOption" />
        /// </param>
        /// <returns>
        /// A <see cref="bool" />
        /// </returns>
        public virtual bool IsValidChecksum(TransportChecksumOption option)
        {
            var dataToChecksum = ((IPPacket)ParentPacket).PayloadPacket.BytesSegment;

            if (dataToChecksum.Offset + dataToChecksum.Length > dataToChecksum.BytesLength)
            {
                return(false);
            }


            var bytes = option == TransportChecksumOption.IncludePseudoIPHeader
                ? ((IPPacket)ParentPacket).GetPseudoIPHeader(dataToChecksum.Length)
                : new byte[0];

            var onesSum = ChecksumUtils.OnesSum(dataToChecksum, bytes);

            Log.DebugFormat("option: {0}, byteArrayCombination.Length {1}",
                            option,
                            bytes.Length);

            const int expectedOnesSum = 0xFFFF;

            Log.DebugFormat("onesSum {0} expected {1}",
                            onesSum,
                            expectedOnesSum);

            return(onesSum == expectedOnesSum);
        }
        /// <summary>
        /// Calculates the transport layer checksum, either for the
        /// tcp or udp packet
        /// </summary>
        /// <param name="option">
        ///     <see cref="TransportChecksumOption" />
        /// </param>
        /// <returns>
        /// A <see cref="int" />
        /// </returns>
        internal int CalculateChecksum(TransportChecksumOption option)
        {
            // save the checksum field value so it can be restored, altering the checksum is not
            // an intended side effect of this method
            var originalChecksum = Checksum;

            // reset the checksum field (checksum is calculated when this field is
            // zeroed)
            Checksum = 0;

            // copy the tcp section with data
            var dataToChecksum = ((IPPacket)ParentPacket).PayloadPacket.BytesSegment;

            var bytes = option == TransportChecksumOption.IncludePseudoIPHeader
                ? ((IPPacket)ParentPacket).GetPseudoIPHeader(dataToChecksum.Length)
                : new byte[0];

            // calculate the one's complement sum of the tcp header
            var cs = ChecksumUtils.OnesComplementSum(dataToChecksum, bytes);

            // restore the checksum field value
            Checksum = originalChecksum;

            return(cs);
        }
Beispiel #3
0
        /// <summary>
        /// Calculates the transport layer checksum, either for the
        /// tcp or udp packet
        /// </summary>
        /// <param name="option"><see cref="TransportPacket.TransportChecksumOption"/></param>
        /// <returns>
        /// A <see cref="System.Int32"/>
        /// </returns>
        internal int CalculateChecksum(TransportChecksumOption option)
        {
            // save the checksum field value so it can be restored, altering the checksum is not
            // an intended side effect of this method
            var originalChecksum = Checksum;

            // reset the checksum field (checksum is calculated when this field is
            // zeroed)
            Checksum = 0;

            // copy the tcp section with data
            byte[] dataToChecksum = ((IpPacket)ParentPacket).PayloadPacket.Bytes;

            if (option == TransportChecksumOption.AttachPseudoIPHeader)
            {
                dataToChecksum = ((IpPacket)ParentPacket).AttachPseudoIPHeader(dataToChecksum);
            }

            // calculate the one's complement sum of the tcp header
            int cs = ChecksumUtils.OnesComplementSum(dataToChecksum);

            // restore the checksum field value
            Checksum = originalChecksum;

            return(cs);
        }
Beispiel #4
0
 public virtual bool IsValidChecksum(TransportChecksumOption option)
 {
     byte[] bytes = ((IpPacket)this.ParentPacket).PayloadPacket.Bytes;
     if (option == TransportChecksumOption.AttachPseudoIPHeader)
     {
         bytes = ((IpPacket)this.ParentPacket).AttachPseudoIPHeader(bytes);
     }
     return(ChecksumUtils.OnesSum(bytes) == 0xffff);
 }
Beispiel #5
0
 internal int CalculateChecksum(TransportChecksumOption option)
 {
     this.Checksum = 0;
     byte[] bytes = ((IpPacket)this.ParentPacket).PayloadPacket.Bytes;
     if (option == TransportChecksumOption.AttachPseudoIPHeader)
     {
         bytes = ((IpPacket)this.ParentPacket).AttachPseudoIPHeader(bytes);
     }
     return(ChecksumUtils.OnesComplementSum(bytes));
 }
Beispiel #6
0
        /// <summary>
        /// Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        /// A <see cref="TransportChecksumOption"/>
        /// </param>
        /// <returns>
        /// A <see cref="System.Boolean"/>
        /// </returns>
        public virtual bool IsValidChecksum(TransportChecksumOption option)
        {
            var upperLayer = ((IpPacket)ParentPacket).PayloadPacket.Bytes;

            if (option == TransportChecksumOption.AttachPseudoIPHeader)
            {
                upperLayer = ((IpPacket)ParentPacket).AttachPseudoIPHeader(upperLayer);
            }

            var       onesSum         = ChecksumUtils.OnesSum(upperLayer);
            const int expectedOnesSum = 0xffff;

            return(onesSum == expectedOnesSum);
        }
Beispiel #7
0
        /// <summary>
        ///     Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        ///     A <see cref="TransportChecksumOption" />
        /// </param>
        /// <returns>
        ///     A <see cref="System.Boolean" />
        /// </returns>
        public virtual bool IsValidChecksum(TransportChecksumOption option)
        {
            var upperLayer = ((IpPacket)this.ParentPacket).PayloadPacket.Bytes;

            log.DebugFormat("option: {0}, upperLayer.Length {1}", option, upperLayer.Length);

            if (option == TransportChecksumOption.AttachPseudoIPHeader)
            {
                upperLayer = ((IpPacket)this.ParentPacket).AttachPseudoIPHeader(upperLayer);
            }

            var       onesSum         = ChecksumUtils.OnesSum(upperLayer);
            const int expectedOnesSum = 0xffff;

            log.DebugFormat("onesSum {0} expected {1}", onesSum, expectedOnesSum);

            return(onesSum == expectedOnesSum);
        }
Beispiel #8
0
        /// <summary>
        /// Determine if the transport layer checksum is valid
        /// </summary>
        /// <param name="option">
        /// A <see cref="TransportChecksumOption"/>
        /// </param>
        /// <returns>
        /// A <see cref="System.Boolean"/>
        /// </returns>
        public virtual Boolean IsValidChecksum(TransportChecksumOption option)
        {
            var dataToChecksum = ((IpPacket)ParentPacket).PayloadPacket.BytesHighPerformance;

            var bytes = option == TransportChecksumOption.IncludePseudoIPHeader
                    ? ((IpPacket)ParentPacket).GetPseudoIPHeader(dataToChecksum.Length)
                    : new byte[0];

            var onesSum = ChecksumUtils.OnesSum(dataToChecksum, bytes);

            log.DebugFormat("option: {0}, byteArrayCombination.Length {1}",
                            option, bytes.Length);

            const Int32 expectedOnesSum = 0xffff;

            log.DebugFormat("onesSum {0} expected {1}",
                            onesSum,
                            expectedOnesSum);

            return(onesSum == expectedOnesSum);
        }