/// <summary> /// Establish a RDP connection to detect RDP feature /// </summary> /// <returns>Return true if detection succeeded.</returns> public bool DetectRDPFeature(Configs config) { try { DetectorUtil.WriteLog("Establish RDP connection with SUT..."); Initialize(config); ConnectRDPServer(); try { bool status = EstablishRDPConnection( config, requestedProtocol, SVCNames, CompressionType.PACKET_COMPR_TYPE_NONE, false, true, false, false, false, false, false); if (!status) { DetectorUtil.WriteLog("Failed", false, LogStyle.StepFailed); return(false); } } catch (Exception e) { DetectorUtil.WriteLog("" + e.StackTrace); } DetectorUtil.WriteLog("Passed", false, LogStyle.StepPassed); CheckSupportedFeatures(); CheckSupportedProtocols(); config.RDPEDYCSupported = detectInfo.IsSupportRDPEDYC.ToString(); config.RDPELESupported = detectInfo.IsSupportRDPELE.ToString(); SetRdpVersion(config); } catch (Exception e) { DetectorUtil.WriteLog("Exception occured when establishing RDP connection: " + e.Message); DetectorUtil.WriteLog("" + e.StackTrace); if (e.InnerException != null) { DetectorUtil.WriteLog("**" + e.InnerException.Message); DetectorUtil.WriteLog("**" + e.InnerException.StackTrace); } DetectorUtil.WriteLog("Failed", false, LogStyle.StepFailed); return(false); } // Disconnect ClientInitiatedDisconnect(); Disconnect(); DetectorUtil.WriteLog("Passed", false, LogStyle.StepPassed); return(true); }
private bool EstablishRDPConnection( Configs config, requestedProtocols_Values requestedProtocols, string[] SVCNames, CompressionType highestCompressionTypeSupported, bool isReconnect = false, bool autoLogon = false, bool supportEGFX = false, bool supportAutoDetect = false, bool supportHeartbeatPDU = false, bool supportMultitransportReliable = false, bool supportMultitransportLossy = false, bool supportAutoReconnect = false, bool supportFastPathInput = false, bool supportFastPathOutput = false, bool supportSurfaceCommands = false, bool supportSVCCompression = false, bool supportRemoteFXCodec = false) { // Connection Initiation SendClientX224ConnectionRequest(requestedProtocols); Server_X_224_Connection_Confirm_Pdu connectionConfirmPdu = ExpectPacket <Server_X_224_Connection_Confirm_Pdu>(new TimeSpan(0, 0, 60)); if (connectionConfirmPdu == null) { TimeSpan waitTime = new TimeSpan(0, 0, 1); Server_X_224_Negotiate_Failure_Pdu failurePdu = ExpectPacket <Server_X_224_Negotiate_Failure_Pdu>(waitTime); if (failurePdu != null) { DetectorUtil.WriteLog("Received a Server X224 Connection confirm with RDP_NEG_FAILURE structure."); } DetectorUtil.WriteLog("Expecting a Server X224 Connection Confirm PDU."); return(false); } // Basic Settings Exchange SendClientMCSConnectInitialPDU( SVCNames, supportEGFX, supportAutoDetect, supportHeartbeatPDU, supportMultitransportReliable, supportMultitransportLossy, false); connectResponsePdu = ExpectPacket <Server_MCS_Connect_Response_Pdu_with_GCC_Conference_Create_Response>(timeout); if (connectResponsePdu == null) { return(false); } bool serverSupportUDPFECR = false; bool serverSupportUDPFECL = false; if (connectResponsePdu.mcsCrsp.gccPdu.serverMultitransportChannelData != null) { if (connectResponsePdu.mcsCrsp.gccPdu.serverMultitransportChannelData.flags.HasFlag(MULTITRANSPORT_TYPE_FLAGS.TRANSPORTTYPE_UDPFECR)) { serverSupportUDPFECR = true; } if (connectResponsePdu.mcsCrsp.gccPdu.serverMultitransportChannelData.flags.HasFlag(MULTITRANSPORT_TYPE_FLAGS.TRANSPORTTYPE_UDPFECL)) { serverSupportUDPFECL = true; } } detectInfo.IsSupportRDPEMT = serverSupportUDPFECR || serverSupportUDPFECL; // Channel Connection SendClientMCSErectDomainRequest(); SendClientMCSAttachUserRequest(); Server_MCS_Attach_User_Confirm_Pdu userConfirmPdu = ExpectPacket <Server_MCS_Attach_User_Confirm_Pdu>(timeout); if (userConfirmPdu == null) { return(false); } ChannelJoinRequestAndConfirm(); // RDP Security Commencement if (rdpbcgrClient.Context.ServerSelectedProtocol == (uint)selectedProtocols_Values.PROTOCOL_RDP_FLAG) { SendClientSecurityExchangePDU(); } // Secure Settings Exchange SendClientInfoPDU(config, highestCompressionTypeSupported, isReconnect, autoLogon); rdpeleClient = new RdpeleClient(rdpbcgrClient); try { detectInfo.IsSupportRDPELE = ProcessLicenseSequence(config, timeout); } catch { detectInfo.IsSupportRDPELE = false; } rdpeleClient.Dispose(); // Capabilities Exchange Server_Demand_Active_Pdu demandActivePdu = ExpectPacket <Server_Demand_Active_Pdu>(timeout); if (demandActivePdu == null) { return(false); } SendClientConfirmActivePDU( supportAutoReconnect, supportFastPathInput, supportFastPathOutput, supportSVCCompression); // Connection Finalization SendClientSynchronizePDU(); Server_Synchronize_Pdu syncPdu = ExpectPacket <Server_Synchronize_Pdu>(timeout); if (syncPdu == null) { return(false); } Server_Control_Pdu_Cooperate CoopControlPdu = ExpectPacket <Server_Control_Pdu_Cooperate>(timeout); if (CoopControlPdu == null) { return(false); } SendClientControlCooperatePDU(); SendClientControlRequestPDU(); Server_Control_Pdu_Granted_Control grantedControlPdu = ExpectPacket <Server_Control_Pdu_Granted_Control>(timeout); if (grantedControlPdu == null) { return(false); } SendClientFontListPDU(); Server_Font_Map_Pdu fontMapPdu = ExpectPacket <Server_Font_Map_Pdu>(timeout); if (fontMapPdu == null) { return(false); } return(true); }
private void SetRdpVersion(Configs config) { DetectorUtil.WriteLog("Detect RDP version..."); config.Version = DetectorUtil.GetPropertyValue("RDP.Version"); if (connectResponsePdu.mcsCrsp.gccPdu.serverCoreData == null) { DetectorUtil.WriteLog("Failed", false, LogStyle.StepFailed); DetectorUtil.WriteLog("Detect RDP version failed, serverCoreData in Server_MCS_Connect_Response_Pdu_with_GCC_Conference_Create_Response does not exist!"); } TS_UD_SC_CORE_version_Values rdpVersion = connectResponsePdu.mcsCrsp.gccPdu.serverCoreData.version; if (rdpVersion == TS_UD_SC_CORE_version_Values.V1) { config.Version = "4.0"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V2) { config.Version = "8.1"; // RDP 5.0, 5.1, 5.2, 6.0, 6.1, 7.0, 7.1, 8.0, and 8.1 servers } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V3) { config.Version = "10.0"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V4) { config.Version = "10.1"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V5) { config.Version = "10.2"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V6) { config.Version = "10.3"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V7) { config.Version = "10.4"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V8) { config.Version = "10.5"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V9) { config.Version = "10.6"; } else if (rdpVersion == TS_UD_SC_CORE_version_Values.V10) { config.Version = "10.7"; } else { DetectorUtil.WriteLog("Failed", false, LogStyle.StepFailed); DetectorUtil.WriteLog("Detect RDP version failed, unknown version detected!"); } detectInfo.Version = connectResponsePdu.mcsCrsp.gccPdu.serverCoreData.version; DetectorUtil.WriteLog("Passed", false, LogStyle.StepPassed); DetectorUtil.WriteLog("Detect RDP version finished."); }
/// <summary> /// Establish a RDP connection to detect RDP feature /// </summary> /// <returns>Return true if detection succeeded.</returns> public bool DetectRDPFeature(Configs config) { try { logWriter.AddLog(DetectLogLevel.Information, "Establish RDP connection with SUT..."); Initialize(config); ConnectRDPServer(); try { bool status = EstablishRDPConnection( config, requestedProtocol, SVCNames, CompressionType.PACKET_COMPR_TYPE_NONE, false, true, false, false, true, true, false); if (!status) { logWriter.AddLog(DetectLogLevel.Warning, "Failed", false, LogStyle.StepFailed); return(false); } } catch (Exception e) { logWriter.AddLog(DetectLogLevel.Information, string.Format("ErrorMessage:{0}{1}StackTrace:{2}", e.Message, Environment.NewLine, e.StackTrace)); logWriter.AddLog(DetectLogLevel.Warning, "Failed", false, LogStyle.StepFailed); return(false); } logWriter.AddLog(DetectLogLevel.Warning, "Finished", false, LogStyle.StepPassed); CheckSupportedFeatures(); CheckSupportedProtocols(); config.RDPEDYCSupported = detectInfo.IsSupportRDPEDYC.ToString(); config.RDPELESupported = detectInfo.IsSupportRDPELE.ToString(); SetRdpVersion(config); } catch (Exception e) { logWriter.AddLog(DetectLogLevel.Information, string.Format("Exception occured when establishing RDP connection.{1} ErrorMessage:{0}{1}StackTrace:{2}", e.Message, Environment.NewLine, e.StackTrace)); if (e.InnerException != null) { logWriter.AddLog(DetectLogLevel.Information, string.Format("ErrorMessage:{0}{1}StackTrace:{2}", e.InnerException.Message, Environment.NewLine, e.InnerException.StackTrace)); } logWriter.AddLog(DetectLogLevel.Warning, "Failed", false, LogStyle.StepFailed); return(false); } // Disconnect ClientInitiatedDisconnect(); Disconnect(); logWriter.AddLog(DetectLogLevel.Warning, "Finished", true, LogStyle.StepPassed); return(true); }