コード例 #1
0
        public static bool IsPasswordVisible(MarshalingType marshalingType, object FieldName)
        {
            if (FieldName == null)
            {
                return(false);
            }

            RDP_SERVER_REDIRECTION_PACKET packetData = (RDP_SERVER_REDIRECTION_PACKET)FieldName;

            return(packetData.PasswordLength != 0);
        }
コード例 #2
0
        public static bool IsTargetNetAddressVisible(MarshalingType marshalingType, object FieldName)
        {
            if (FieldName == null)
            {
                return(false);
            }

            RDP_SERVER_REDIRECTION_PACKET packetData = (RDP_SERVER_REDIRECTION_PACKET)FieldName;

            return(packetData.TargetNetAddressesLength != 0);
        }
コード例 #3
0
        /// <summary>
        /// Parse RDP_SERVER_REDIRECTION_PACKET
        /// </summary>
        /// <param name="data">data to be parsed</param>
        /// <param name="currentIndex">current parser index</param>
        /// <returns>RDP_SERVER_REDIRECTION_PACKET</returns>
        private RDP_SERVER_REDIRECTION_PACKET ParseRdpServerRedirectionPacket(
            byte[] data,
            ref int currentIndex)
        {
            RDP_SERVER_REDIRECTION_PACKET packet = new RDP_SERVER_REDIRECTION_PACKET();

            int startIndex = currentIndex;

            // RDP_SERVER_REDIRECTION_PACKET: flags
            packet.Flags = ParseUInt16(data, ref currentIndex, false);

            // RDP_SERVER_REDIRECTION_PACKET: length
            packet.Length = ParseUInt16(data, ref currentIndex, false);

            // RDP_SERVER_REDIRECTION_PACKET: sessionId
            packet.SessionId = ParseUInt32(data, ref currentIndex, false);

            // RDP_SERVER_REDIRECTION_PACKET: redirFlags
            packet.RedirFlags = (RedirectionFlags)ParseUInt32(data, ref currentIndex, false);

            if ((packet.RedirFlags & RedirectionFlags.LB_TARGET_NET_ADDRESS) == RedirectionFlags.LB_TARGET_NET_ADDRESS)
            {
                // RDP_SERVER_REDIRECTION_PACKET: targetNetAddress
                packet.TargetNetAddressLength = ParseUInt32(data, ref currentIndex, false);
                packet.TargetNetAddress = GetBytes(data, ref currentIndex, (int)packet.TargetNetAddressLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_LOAD_BALANCE_INFO) == RedirectionFlags.LB_LOAD_BALANCE_INFO)
            {
                // RDP_SERVER_REDIRECTION_PACKET: loadBalanceInfo
                packet.LoadBalanceInfoLength = ParseUInt32(data, ref currentIndex, false);
                packet.LoadBalanceInfo = GetBytes(data, ref currentIndex, (int)packet.LoadBalanceInfoLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_USERNAME) == RedirectionFlags.LB_USERNAME)
            {
                // RDP_SERVER_REDIRECTION_PACKET: userName
                packet.UserNameLength = ParseUInt32(data, ref currentIndex, false);
                packet.UserName = GetBytes(data, ref currentIndex, (int)packet.UserNameLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_DOMAIN) == RedirectionFlags.LB_DOMAIN)
            {
                // RDP_SERVER_REDIRECTION_PACKET: domain
                packet.DomainLength = ParseUInt32(data, ref currentIndex, false);
                packet.Domain = GetBytes(data, ref currentIndex, (int)packet.DomainLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_PASSWORD) == RedirectionFlags.LB_PASSWORD)
            {
                // RDP_SERVER_REDIRECTION_PACKET: password
                packet.PasswordLength = ParseUInt32(data, ref currentIndex, false);
                packet.Password = GetBytes(data, ref currentIndex, (int)packet.PasswordLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_TARGET_FQDN) == RedirectionFlags.LB_TARGET_FQDN)
            {
                // RDP_SERVER_REDIRECTION_PACKET: targetFqdn
                packet.TargetFQDNLength = ParseUInt32(data, ref currentIndex, false);
                packet.TargetFQDN = GetBytes(data, ref currentIndex, (int)packet.TargetFQDNLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_TARGET_NETBIOS_NAME)
                == RedirectionFlags.LB_TARGET_NETBIOS_NAME)
            {
                // RDP_SERVER_REDIRECTION_PACKET: targetNetBiosName
                packet.TargetNetBiosNameLength = ParseUInt32(data, ref currentIndex, false);
                packet.TargetNetBiosName = GetBytes(data, ref currentIndex, (int)packet.TargetNetBiosNameLength);
            }

            if ((packet.RedirFlags & RedirectionFlags.LB_TARGET_NET_ADDRESSES)
                == RedirectionFlags.LB_TARGET_NET_ADDRESSES)
            {
                // RDP_SERVER_REDIRECTION_PACKET: targetNetAddresses
                packet.TargetNetAddressesLength = ParseUInt32(data, ref currentIndex, false);
                packet.TargetNetAddresses.addressCount = ParseUInt32(data, ref currentIndex, false);
                packet.TargetNetAddresses.address = new TARGET_NET_ADDRESS[packet.TargetNetAddresses.addressCount];
                for (int i = 0; i < packet.TargetNetAddresses.addressCount; ++i)
                {
                    packet.TargetNetAddresses.address[i].addressLength = ParseUInt32(data, ref currentIndex, false);
                    packet.TargetNetAddresses.address[i].address = GetBytes(data, ref currentIndex,
                        (int)packet.TargetNetAddresses.address[i].addressLength);
                }
            }

            // check if there's paddings
            int remainBytes = packet.Length - (currentIndex - startIndex);
            if (remainBytes > 0)
            {
                packet.Pad = GetBytes(data, ref currentIndex, remainBytes);
            }

            return packet;
        }
コード例 #4
0
        private byte[] EncodeRedirectionData(RDP_SERVER_REDIRECTION_PACKET serverRedirectionPdu)
        {
            List<byte> dataBuffer = new List<byte>();

            RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.Flags);
            RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.Length);
            RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.SessionId);
            RdpbcgrEncoder.EncodeStructure(dataBuffer, (uint)serverRedirectionPdu.RedirFlags);
            if (serverRedirectionPdu.TargetNetAddressLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetNetAddressLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.TargetNetAddress);
            }
            if (serverRedirectionPdu.LoadBalanceInfoLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.LoadBalanceInfoLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.LoadBalanceInfo);
            }
            if (serverRedirectionPdu.UserNameLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.UserNameLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.UserName);
            }
            if (serverRedirectionPdu.DomainLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.DomainLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.Domain);
            }
            if (serverRedirectionPdu.PasswordLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.PasswordLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.Password);
            }
            if (serverRedirectionPdu.TargetFQDNLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetFQDNLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.TargetFQDN);
            }
            if (serverRedirectionPdu.TargetNetBiosNameLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetNetBiosNameLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.TargetNetBiosName);
            }
            if (serverRedirectionPdu.TargetNetAddressesLength > 0)
            {
                RdpbcgrEncoder.EncodeStructure(dataBuffer, serverRedirectionPdu.TargetNetAddressesLength);
                RdpbcgrEncoder.EncodeBytes(dataBuffer, EncodeTargetNetAddresses(serverRedirectionPdu.TargetNetAddresses));
            }
            RdpbcgrEncoder.EncodeBytes(dataBuffer, serverRedirectionPdu.Pad);

            return dataBuffer.ToArray();
        }