コード例 #1
0
        /// <summary>
        /// Create invalid SYN and ACK Packet
        /// </summary>
        /// <param name="udpTransportMode">Transport mode: reliable or lossy</param>
        /// <param name="invalidType">Invalid type</param>
        /// <param name="initSequenceNumber">init sequence</param>
        /// <returns></returns>
        private RdpeudpPacket CreateInvalidSynAndACKPacket(TransportMode udpTransportMode, SynAndAck_InvalidType invalidType, uint?initSequenceNumber = null)
        {
            RdpeudpServerSocket rdpeudpSocket = rdpeudpSocketR;

            if (udpTransportMode == TransportMode.Lossy)
            {
                rdpeudpSocket = rdpeudpSocketL;
            }

            // Create the SYN and ACK packet.
            RdpeudpPacket SynAndAckPacket = new RdpeudpPacket();

            SynAndAckPacket.fecHeader.snSourceAck        = rdpeudpSocket.SnSourceAck;
            SynAndAckPacket.fecHeader.uReceiveWindowSize = rdpeudpSocket.UReceiveWindowSize;
            SynAndAckPacket.fecHeader.uFlags             = RDPUDP_FLAG.RDPUDP_FLAG_SYN | RDPUDP_FLAG.RDPUDP_FLAG_ACK;


            RDPUDP_SYNDATA_PAYLOAD SynPayload = rdpeudpSocket.CreateSynData(initSequenceNumber);

            switch (invalidType)
            {
            case SynAndAck_InvalidType.LargerUpStreamMtu:
                SynPayload.uUpStreamMtu = 1232 + 1;
                break;

            case SynAndAck_InvalidType.SamllerUpStreamMtu:
                SynPayload.uUpStreamMtu = 1132 - 1;
                break;

            case SynAndAck_InvalidType.LargerDownStreamMtu:
                SynPayload.uDownStreamMtu = 1232 + 1;
                break;

            case SynAndAck_InvalidType.SamllerDownStreamMtu:
                SynPayload.uDownStreamMtu = 1132 - 1;
                break;
            }

            SynAndAckPacket.SynData = SynPayload;

            return(SynAndAckPacket);
        }