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); }
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); }
/// <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; }
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(); }