{*******************************************************} { } { ThdBS1Agent } { } { Copyright (C) 2023 kku } { } {*******************************************************} unit ThdBS1Agent; interface uses Tocsg.Thread, System.SysUtils, Winapi.Windows, Winapi.Messages, System.Classes, IdHTTP, IdSSLOpenSSL, ThdEvent; const // VER_AGENT = '1.5.6.91'; VER_AGENT = '1.5.8.153'; WM_UPDATE_AGENT = WM_USER + 4902; type TCheckAgentInfo = record sAgentId, sIp, sIps, sMAC, sHostName, // sStatusType, sEulaCon, sLocation, sPwSet, sPwSetTermOk, sScrnLock, sOsVer, sAvInfo, // sAsInfo, sFwInfo, sOsSafe, sPatchExist, sAvSafe, sFwSafe, sAvUptodate, sPiSafe, // sSafeBlock, sModeName, sEmpNo: String; bSafePcSHCD: Boolean; // ³ªÁß¿¡ »èÁ¦ ¿¹Á¤ 23_0313 16:19:12 kku end; TReqPoKind = (rpkId, rpkAll, rpkMng, rpkSelPo, npkSelPoCate, npkSelPoKey); TAgentState = (asInit, asConnected, asDisconnected); TBS1ModeKind = (hmkSleep, hmkSecurity, hmkVulnerability, hmkOffline, hmkException); TThdBS1Agent = class(TTgThread) private HTTP_: TIdHTTP; SSL_: TIdSSLIOHandlerSocketOpenSSL; hRcvWnd_: HWND; pNode_: Pointer; sAccount_, sLastPolModeDT_, sIp_, sMac_, sHead_, sEmpNo_, sDept_, sUName_, sEMail_, sHostName_, sAgentId_, sSvrAddr_, sPolicyGroup_: String; AgentInfo_: TCheckAgentInfo; dwInterval_: DWORD; Mode_: TBS1ModeKind; State_: TAgentState; dtLastPolMod_, dtLastRcvPol_: TDateTime; bAbleUpdateInfo_: Boolean; ThdEvent_: TThdEvent; protected function GetState: TAgentState; procedure SetState(aState: TAgentState); function GetMode: TBS1ModeKind; procedure SetMode(aMode: TBS1ModeKind); procedure Execute; override; public Constructor Create(hRcvWnd: HWND; pNode: Pointer; sEmpNo, sHostName: String; dwInterval: DWORD = 0); Destructor Destroy; override; function ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''): Boolean; procedure SendEventLog(sUri, sCode, sMsg: String); procedure UpdateAgentInfo; procedure SetUpdateAgentInfo(bVal: Boolean); property AgentState: TAgentState read GetState; property AgentMode: TBS1ModeKind read GetMode write SetMode; property PolicyGroup: String read sPolicyGroup_; property EmpNo: String read sEmpNo_; property LastRcvPolDT: TDateTime read dtLastRcvPol_; property LastPolModDT: TDateTime read dtLastPolMod_; property SvrAddr: String read sSvrAddr_; end; implementation uses HttpUtil, Tocsg.Exception, ManagerSetting, superobject, Tocsg.Network, Condition, CrmUtil, GlobalDefine, Tocsg.Convert, Tocsg.WinInfo; { TThdBS1Agent } Constructor TThdBS1Agent.Create(hRcvWnd: HWND; pNode: Pointer; sEmpNo, sHostName: String; dwInterval: DWORD = 0); begin Inherited Create; hRcvWnd_ := hRcvWnd; pNode_ := pNode; sIp_ := GetHostIP; sMac_ := GetMACAddrUsing; sHead_ := gSet.EmpNoHead; State_ := asInit; sEmpNo_ := sEmpNo; sAgentId_ := sEmpNo_; sHostName_ := sHostName; sSvrAddr_ := gSet.SvrAddr; if (Length(sSvrAddr_) > 0) and (sSvrAddr_[Length(sSvrAddr_)] <> '/') then sSvrAddr_ := sSvrAddr_ + '/'; sAccount_ := GetAccount; sPolicyGroup_ := 'Default'; sLastPolModeDT_ := '1999-01-01 01:01:01'; sDept_ := ''; sUName_ := ''; sEMail_ := ''; ZeroMemory(@AgentInfo_, SizeOf(AgentInfo_)); dtLastPolMod_ := 0; dtLastRcvPol_ := 0; dwInterval_ := dwInterval; if dwInterval_ = 0 then dwInterval_ := 4000; HTTP_ := nil; SSL_ := nil; bAbleUpdateInfo_ := false; ASSERT(CreateHttpSSL(HTTP_, SSL_, gSet.ReadTimeout, gSet.ConnectTimeout)); Mode_ := hmkSleep; ThdEvent_ := TThdEvent.Create(sSvrAddr_); ThdEvent_.StartThread; // FreeOnTerminate := true; end; Destructor TThdBS1Agent.Destroy; begin FreeAndNil(ThdEvent_); Inherited; FreeAndNil(HTTP_); FreeAndNil(SSL_); end; procedure TThdBS1Agent.SendEventLog(sUri, sCode, sMsg: String); var O: ISuperObject; begin try O := SO; // if bPrevent then // O.S['TYP_MSG'] := '@(!)_IC_P' // else O.S['TYP_MSG'] := '@(!)_IC_M'; O.S['KEY_AGENTID'] := sAgentId_; O.S['KEY_EMPNO'] := sEmpNo_; O.S['KEY_ACCOUNT'] := sAccount_; O.S['KEY_HOSTNAME'] := sHostName_; O.S['KEY_SUBMITTIME'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); O.S['KEY_LOGCODE'] := sCode; O.S['DETECTION_DATE'] := O.S['KEY_SUBMITTIME']; // À̺¥Æ® ¹ß»ý ½Ã°¢. REQUESTÀÇ °æ¿ì, ¿¹¿Ü ½ÅûÇÒ À̺¥Æ®ÀÇ ¹ß»ý ½Ã°¢ O.S['KEY_SUMMARY'] := sMsg; // O.S['PARENT_LA_ID'] // »óÀ§ À̺¥Æ® O.S['POLICY_ID'] := 'Unknown'; // 2.6 // O.S['MODEL_ID'] := sAgentId_; // O.S['TOCSG_LA_IFNAME'] := sUri; // O.S['TOCSG_LA_ID'] := sAgentId_; // O.S['TOCSG_LA_EMPID'] := sEmpNo_; // O.S['TOCSG_LA_CODE'] := sCode; // O.S['TOCSG_LA_DATA'] := Format('[%s] ', [sHead_]) + sMsg; // O.S['TOCSG_LA_HOSTNAME'] := sHostName_; // O.S['TOCSG_LA_LASTCONNDATE'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); // O.S['TOCSG_LA_MACADDR'] := sIp_; // O.S['TOCSG_LA_REMOTEIP'] := sMac_; ThdEvent_.Push(O.AsString); except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. SendEventLog()'); end; end; function TThdBS1Agent.GetState: TAgentState; begin Lock; try Result := State_; finally Unlock; end; end; procedure TThdBS1Agent.SetState(aState: TAgentState); begin Lock; try State_ := aState; finally Unlock; end; end; function TThdBS1Agent.GetMode: TBS1ModeKind; begin Lock; try Result := Mode_; finally Unlock; end; end; procedure TThdBS1Agent.SetMode(aMode: TBS1ModeKind); begin Lock; try Mode_ := aMode; finally Unlock; end; end; procedure TThdBS1Agent.UpdateAgentInfo; begin if bAbleUpdateInfo_ and (hRcvWnd_ <> 0) then SendMessage(hRcvWnd_, WM_UPDATE_AGENT, 0, NativeInt(pNode_)); end; procedure TThdBS1Agent.SetUpdateAgentInfo(bVal: Boolean); begin bAbleUpdateInfo_ := bVal; end; function TThdBS1Agent.ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''): Boolean; var O, OP: ISuperObject; sReqType, sRes: String; begin try O := SO; O.S['KEY_AGENTID'] := sAgentId_; O.S['KEY_EMPNO'] := sEmpNo_; O.S['KEY_HOSTNAME'] := sHostName_; O.S['KEY_OSVER'] := '?'; case aKind of rpkId : sReqType := '0'; rpkAll : sReqType := '1'; rpkMng : sReqType := '2'; rpkSelPo : begin sReqType := '3'; if sPoId = '' then begin _Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID'); exit; end; O.S['KEY_POLICYID'] := sPoId; end; npkSelPoCate : begin sReqType := '4'; if sPoId = '' then begin _Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID'); exit; end; if sPoAddInfo = '' then begin _Trace('ProcessRcvPolicy() .. npkSelPoCate .. EmptyCate'); exit; end; O.S['KEY_POLICYID'] := sPoId; O.S['KEY_CATEGORY'] := sPoAddInfo; end; npkSelPoKey : begin sReqType := '5'; if sPoId = '' then begin _Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID'); exit; end; if sPoAddInfo = '' then begin _Trace('ProcessRcvPolicy() .. npkSelPoKey .. EmptyKey'); exit; end; O.S['KEY_POLICYID'] := sPoId; O.S['KEY_POLICYKEY'] := sPoAddInfo; end; end; // {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\pa.json'); {$ENDIF} sRes := HttpPost(HTTP_, sSvrAddr_ + 'policyRequest.do', sReqType, O.AsString); if sRes = '' then begin // _Trace('ProcessRcvPolicy() .. Empty .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]); exit; end else if sRes = POST_TIMEOUT then begin // _Trace('ProcessRcvPolicy() .. timeout .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]); exit; end; OP := SO(sRes); if OP = nil then begin _Trace('ProcessRcvPolicy() .. Invalid policy'); exit; end; dtLastRcvPol_ := Now; case aKind of rpkId : ; rpkAll : begin var sGrpName: String := OP.S['GROUP_NAME']; if sPolicyGroup_ <> sGrpName then begin sPolicyGroup_ := sGrpName; end; // gMgSvc.PrefModel.PolicyGroup := sGrpName; // gMgSvc.PrefModel.PolicyId := OP.S['SECUMODE']; // gMgSvc.SleepPolicy.PolicyGroup := sGrpName; // gMgSvc.SleepPolicy.PolicyId := OP.S['SLEEPMODE']; // gMgSvc.VulPolicy.PolicyGroup := sGrpName; // gMgSvc.VulPolicy.PolicyId := OP.S['VULMODE']; // gMgSvc.OffPolicy.PolicyGroup := sGrpName; // gMgSvc.OffPolicy.PolicyId := OP.S['OFFLINEMODE']; // gMgSvc.ExpPolicy.PolicyGroup := sGrpName; // gMgSvc.ExpPolicy.PolicyId := OP.S['EXCEPTMODE']; // var nOldScreenOld: Integer := gMgSvc.ModePolicy.ScreenLogoAlpha; // // if OP.O['POL_SET'] <> nil then // gMgSvc.PrefModel.SetSetPolicy(OP.O['POL_SET']); // // if OP.O['POL_MNG'] <> nil then // begin // gMgSvc.PrefModel.SetMngPolicy(OP.O['POL_MNG']); // if gMgSvc.PrefModel.HideMainUI and gMain.Showing then // PostMessage(gMgSvc.RcvHwnd, WM_REFRESH_VIEW, 1, 0); // end; // // if (OP.S['SECUMODE'] <> '') and (OP.S['SECUMODE'].ToLower <> 'false') and // (OP.O['POL_SEC'] <> nil) then // gMgSvc.PrefModel.SetPolicy(OP.S['SECUMODE'], OP.O['POL_SEC']); // // if (OP.S['SLEEPMODE'] <> '') and (OP.S['SLEEPMODE'].ToLower <> 'false') and // (OP.O['POL_SLP'] <> nil) then // gMgSvc.SleepPolicy.SetPolicy(OP.S['SLEEPMODE'], OP.O['POL_SLP']) // else // gMgSvc.SleepPolicy.Clear(true, true); // // if (OP.S['VULMODE'] <> '') and (OP.S['VULMODE'].ToLower <> 'false') and // (OP.O['POL_VUL'] <> nil) then // gMgSvc.VulPolicy.SetPolicy(OP.S['VULMODE'], OP.O['POL_VUL']) // else // gMgSvc.VulPolicy.Clear(true, true); // // if (OP.S['OFFLINEMODE'] <> '') and (OP.S['OFFLINEMODE'].ToLower <> 'false') and // (OP.O['POL_OFF'] <> nil) then // gMgSvc.OffPolicy.SetPolicy(OP.S['OFFLINEMODE'], OP.O['POL_OFF']) // else // gMgSvc.OffPolicy.Clear(true, true); // // if (OP.S['EXCEPTMODE'] <> '') and (OP.S['EXCEPTMODE'].ToLower <> 'false') and // (OP.O['POL_EXC'] <> nil) then // gMgSvc.ExpPolicy.SetPolicy(OP.S['EXCEPTMODE'], OP.O['POL_EXC']) // else // gMgSvc.ExpPolicy.Clear(true, true); // // if nOldScreenOld <> gMgSvc.ModePolicy.ScreenLogoAlpha then // gMgSvc.UpdateScreenLogo(true); end; rpkMng : ; rpkSelPo : ; npkSelPoCate : ; npkSelPoKey : ; end; // gMgSvc.RefreshView; // {$IFDEF DEBUG} SaveJsonObjToFile(OP, 'c:\ps.json'); {$ENDIF} except on E: Exception do ETgException.TraceException(E, 'Fail .. ProcessRcvPolicy()'); end; end; procedure TThdBS1Agent.Execute; var bInit: Boolean; sRes, sTemp, sReqType, sLastPolicy: String; O: ISuperObject; bConnected, bPrevConnected: Boolean; NewAgentInfo: TCheckAgentInfo; bUpdate, bChangeAgentInfo: Boolean; function IsChangeAgentInfo: Boolean; begin Result := true; with AgentInfo_ do begin if sAgentId <> NewAgentInfo.sAgentId then exit; if sIp <> NewAgentInfo.sIp then exit; if sIps <> NewAgentInfo.sIps then exit; if sMAC <> NewAgentInfo.sMAC then exit; if sHostName <> NewAgentInfo.sHostName then exit; if sEulaCon <> NewAgentInfo.sEulaCon then exit; if sLocation <> NewAgentInfo.sLocation then exit; if sPwSet <> NewAgentInfo.sPwSet then exit; if sPwSetTermOk <> NewAgentInfo.sPwSetTermOk then exit; if sScrnLock <> NewAgentInfo.sScrnLock then exit; if sOsVer <> NewAgentInfo.sOsVer then exit; if sAvInfo <> NewAgentInfo.sAvInfo then exit; if sFwInfo <> NewAgentInfo.sFwInfo then exit; if sOsSafe <> NewAgentInfo.sOsSafe then exit; if sPatchExist <> NewAgentInfo.sPatchExist then exit; if sAvSafe <> NewAgentInfo.sAvSafe then exit; if sAvUptodate <> NewAgentInfo.sAvUptodate then exit; if sFwSafe <> NewAgentInfo.sFwSafe then exit; if sPiSafe <> NewAgentInfo.sPiSafe then exit; if sEmpNo <> NewAgentInfo.sEmpNo then exit; if bSafePcSHCD <> NewAgentInfo.bSafePcSHCD then exit; if sModeName <> NewAgentInfo.sModeName then exit; end; Result := false; end; Label LB_SignalComplete; begin bInit := false; sLastPolicy := ''; while not Terminated and not GetWorkStop do begin try if not bInit then begin sPolicyGroup_ := ''; sRes := GetEmpNoInfo(sSvrAddr_, HTTP_, sEmpNo_); if sRes = '' then begin Sleep(500); continue; end; try O := SO(sRes); except Sleep(500); continue; end; if (O.S['result'] = 'false') or (O.S['deleteyn'] = 'true') then begin // ¿¡ÀÌÀüÆ® »ç¹ø Á¤º¸°¡ ¾ø°Å³ª »èÁ¦ »óŶó¸é ¼³Ä¡ ·Î±×¸¦ º¸³»ÁØ´Ù 23_0403 09:43:04 kku SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected'); end; bInit := true; // ¼­¹ö¿¡¼­ ¸¶Áö¸· ¸ðµå ·Î±×·Î ÇöÀç ¿¡ÀÌÀüÆ® ¸ðµå¸¦ ÆÇº°ÇÏ°Ô µÇ´Âµ¥ ÃÖÃÊ Á¤º¸°¡ ¾øÀ¸¸é ¿¡ÀÌÀüÆ® ¸ñ·Ï¿¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. 23_0403 13:22:43 kku SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, 'Sleep mode'); SetMode(hmkSleep); SetState(asDisconnected); UpdateAgentInfo; end; NewAgentInfo.sAgentId := sAgentId_; NewAgentInfo.sIp := sIp_; NewAgentInfo.sIps := sIp_; NewAgentInfo.sMAC := sMac_; NewAgentInfo.sHostName := sHostName_; NewAgentInfo.sEulaCon := 'disagree'; NewAgentInfo.sLocation := 'Default'; NewAgentInfo.sPwSet := 'true'; NewAgentInfo.sPwSetTermOk := 'true'; NewAgentInfo.sScrnLock := 'true'; NewAgentInfo.sOsVer := '?'; NewAgentInfo.sAvInfo := 'Windows Defender'; NewAgentInfo.sFwInfo := 'Windows Firewall'; NewAgentInfo.sOsSafe := 'true'; NewAgentInfo.sPatchExist := 'true'; NewAgentInfo.sAvUptodate := 'true'; NewAgentInfo.sAvSafe := 'true'; NewAgentInfo.sFwSafe := 'true'; NewAgentInfo.sPiSafe := 'true'; case GetMode of hmkSleep : NewAgentInfo.sModeName := 'Sleep'; hmkSecurity : NewAgentInfo.sModeName := 'Secu'; hmkVulnerability : NewAgentInfo.sModeName := 'Vul'; hmkOffline : NewAgentInfo.sModeName := 'Offline'; hmkException : NewAgentInfo.sModeName := 'Exption'; end; NewAgentInfo.sEmpNo := sEmpNo_; O := SO; bPrevConnected := GetState = asConnected; O.S['KEY_AGENTID'] := NewAgentInfo.sAgentId; O.S['KEY_EMPNO'] := NewAgentInfo.sEmpNo; O.S['KEY_HOSTNAME'] := NewAgentInfo.sHostName; O.S['KEY_MODE'] := NewAgentInfo.sModeName; O.S['VUL_OSVER'] := NewAgentInfo.sOsVer; // ½Ã±×³Î ÆÐŶ¿¡µµ OSÁ¤º¸ Ãß°¡ 23_1214 15:48:03 kku O.S['KEY_LASTPOLICY'] := sLastPolModeDT_; // ºó°ªÀ» ³ÖÀ¸¸é ÀÀ´äµµ ºó°ªÀ¸·Î ¿Â´Ù... 23_0802 11:06:47 kku bChangeAgentInfo := IsChangeAgentInfo; if bChangeAgentInfo then AgentInfo_ := NewAgentInfo; sReqType := '0'; if not bPrevConnected or bChangeAgentInfo then begin sReqType := '1'; O.S['KEY_IP'] := NewAgentInfo.sIp; O.S['KEY_IPS'] := NewAgentInfo.sIps; O.S['KEY_MAC'] := NewAgentInfo.sMAC; O.S['KEY_GROUPNAME'] := NewAgentInfo.sLocation; O.S['KEY_AGENTTYPE'] := BooleanToStr(IsVDI, 'VDI', 'PC'); O.S['KEY_COLLASTCONN'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); O.S['KEY_COLVERSION'] := VER_AGENT; O.S['VUL_PWDSET'] := NewAgentInfo.sPwSet; // if NewAgentInfo.sPwSetTermOk <> 'true' then // begin // var nOver: Integer := DaysBetween(Now, gMgSvc.LastChangePwDT); // if (nOver > 0) and (nOver > gMgSvc.PrefModel.PwChkTermDay) then // begin // O.S['VUL_PWDEXPIRED'] := 'true'; // O.S['VUL_PWDLASTDAYS'] := IntToStr(nOver - gMgSvc.PrefModel.PwChkTermDay); // end else // O.S['VUL_PWDEXPIRED'] := 'false'; // end else O.S['VUL_PWDEXPIRED'] := 'false'; O.S['VUL_SCRNLOCK'] := NewAgentInfo.sScrnLock; O.S['VUL_OSSAFEPATCH'] := NewAgentInfo.sOsSafe; O.S['VUL_AV'] := NewAgentInfo.sAvInfo; O.S['VUL_AVENABLE'] := NewAgentInfo.sAvSafe; O.S['VUL_AVSAFEPATCH'] := NewAgentInfo.sAvUptodate; O.S['VUL_FW'] := NewAgentInfo.sFwInfo; O.S['VUL_FWENABLE'] := NewAgentInfo.sFwSafe; O.S['VUL_PI'] := NewAgentInfo.sPiSafe; end; // SaveJsonObjToFile(O, 'c:\a.json'); // sRes := HttpPost(HTTP_, sSvrAddr_, '123120', O.AsString, true); sRes := HttpPost(HTTP_, sSvrAddr_ + 'statusRequest.do', sReqType, O.AsString); // Á¢¼Ó »óŠ󸮸¦ TimerCheckConnect()¿¡¼­ ¿©±â·Î ¿Å±è 23_0324 12:04:45 kku try if sRes = 'true' then _Trace('Status Response .. Empty'); bConnected := (sRes = POST_TIMEOUT) or ( (sRes <> '') and (sRes <> '404') and (sRes <> 'true') and sRes.Contains('SERVERTIME') ); if not bConnected then begin SetState(asDisconnected); end else if not bPrevConnected then begin if sRes = POST_TIMEOUT then bConnected := false else SetState(asConnected); end; if bConnected then begin // ¿¬°á ó¸® end; except _Trace('Fail .. ConnectionCheck'); end; if not bConnected or (sRes = POST_TIMEOUT) then goto LB_SignalComplete; // Á¢¼Ó »óÅ ó¸® ³¡ --------------------------------------------------------- try O := SO(sRes); if O = nil then begin _Trace('Invalid PolicyData ... 2'); exit; end; except _Trace('Invalid PolicyData ... 1'); exit; end; bUpdate := false; if O.S['KEY_DEPT'] <> sDept_ then begin sDept_ := O.S['KEY_DEPT']; bUpdate := true; end; if O.S['KEY_USERNAME'] <> sUName_ then begin sUName_ := O.S['KEY_USERNAME']; bUpdate := true; end; if O.S['KEY_USEREMAIL'] <> sEMail_ then begin sEMail_ := O.S['KEY_USEREMAIL']; bUpdate := true; end; if bUpdate then begin // gMgSvc.AgentModel.Save; // gMgSvc.UpdateAgentInfo; end; if (O.S['UPD_RULE'] <> '') and (O.S['UPD_RULE'].ToLower <> 'false') then begin // gMgSvc.MgRule.UpdateRuleEnts(O.O['UPD_RULE']); bUpdate := true; end; if // not bPrevConnected or ((O.S['UPD_TYPE'] <> '') and (O.S['UPD_TYPE'].ToLower <> 'false')) or (O.S['KEY_GROUPNAME'] <> sPolicyGroup_) then begin sPolicyGroup_ := O.S['KEY_GROUPNAME']; ProcessRcvPolicy(rpkAll); // _Trace('Á¤Ã¥ ¾÷µ¥ÀÌÆ®µÊ', 1); // gMgSvc.RefreshView; bUpdate := true; end; if (O.S['UPD_CAMPAIGN'] <> '') and (O.S['UPD_CAMPAIGN'].ToLower <> 'false') then begin // gMgSvc.MgCampn.UpdateCampnEnts(O.O['UPD_CAMPAIGN']); bUpdate := true; end; if bUpdate then begin sLastPolModeDT_ := O.S['SERVERTIME']; // FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); dtLastPolMod_ := StrToDateTime(sLastPolModeDT_); UpdateAgentInfo; end; LB_SignalComplete : Sleep(dwInterval_); except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. Execute()'); end; end; end; //procedure TThdBS1Agent.Execute; //var // bInit: Boolean; // sRes, sTemp, // sStatusType, // sLastPolicy: String; // O: ISuperObject; // bConnected, // bPrevConnected: Boolean; //Label // LB_ProcessPolicy; //begin // bInit := false; // sLastPolicy := ''; // while not Terminated and not GetWorkStop do // begin // try // if not bInit then // begin // sRes := GetEmpNoInfo(sSvrAddr_, HTTP_, sEmpNo_); // if sRes = '' then // begin // Sleep(500); // continue; // end; // // try // O := SO(sRes); // except // Sleep(500); // continue; // end; // // if (O.S['result'] = 'false') or (O.S['deleteyn'] = 'true') then // begin // // ¿¡ÀÌÀüÆ® »ç¹ø Á¤º¸°¡ ¾ø°Å³ª »èÁ¦ »óŶó¸é ¼³Ä¡ ·Î±×¸¦ º¸³»ÁØ´Ù 23_0403 09:43:04 kku // SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected'); // end; // // bInit := true; // // // ¼­¹ö¿¡¼­ ¸¶Áö¸· ¸ðµå ·Î±×·Î ÇöÀç ¿¡ÀÌÀüÆ® ¸ðµå¸¦ ÆÇº°ÇÏ°Ô µÇ´Âµ¥ ÃÖÃÊ Á¤º¸°¡ ¾øÀ¸¸é ¿¡ÀÌÀüÆ® ¸ñ·Ï¿¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. 23_0403 13:22:43 kku // SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, 'Sleep mode'); // SetMode(hmkSleep); // SetState(asDisconnected); // UpdateAgentInfo; // end; // // if GetMode = hmkSecurity then // sStatusType := 'Connected' // else // sStatusType := 'Disconnected'; // // O := SO; // bPrevConnected := GetState = asConnected; // if not bPrevConnected then // begin // O.S['MODEL_ID'] := sAgentId_; // O.S['mwAKey_IP'] := sIp_; // O.S['mwAKey_IPS'] := sIp_; // O.S['mwAKey_MAC'] := sMac_; // O.S['mwAKey_HOSTNAME'] := sHostName_; // O.S['mwAKey_STATUS'] := sStatusType; // O.S['mwAKey_COLLASTCONN'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now); // O.S['mwAKey_COLVERSION'] := VER_AGENT; // O.S['mwAKey_AGENTID'] := sAgentId_; // O.S['mwAKey_EULACONFIRMED'] := 'disagree'; // O.S['mwAKey_LOCATION'] := sPolicyGroup_; // O.S['mwAKey_PWDSET'] := 'true'; // O.S['mwAKey_SCRNLOCK'] := 'true'; // O.S['mwAKey_OSVER'] := '11(Test)'; // O.S['mwAKey_PATCHES'] := 'null'; // O.S['mwAKey_AVINFORM'] := 'Windows Defender'; // O.S['mwAKey_ASINFORM'] := 'Windows Defender'; // O.S['mwAKey_FIREWALLINFO'] := 'Windows Firewall'; // O.S['mwAKey_SOFTWAREINFO'] := 'null'; // O.S['mwAKey_ADDEULACONFIRM'] := 'false'; // O.S['mwAKey_OSSAFE'] := 'true'; // O.S['mwAKey_PATCHEXIST'] := 'true'; // O.S['mwAKey_AVSAFE'] := 'true'; // O.S['mwAKey_ASSAFE'] := 'true'; // O.S['mwAKey_FWSAFE'] := 'true'; // O.S['mwAKey_PISAFE'] := 'true'; // O.S['mwAKey_SAFEBLOCKSETTING'] := BooleanToStr(sStatusType = 'Connected', 'true', 'false'); // O.S['mwAKey_VPNINFO'] := sEmpNo_; // O.S['mwAKey_EMPNO'] := sEmpNo_; //// if NewAgentInfo.bSafePcSHCD then O.S['mwAKey_SAFEPC'] := 'true'; // end else begin // O.S['mwAKey_LOCATION'] := sPolicyGroup_; // O.S['mwAKey_EMPNO'] := sEmpNo_; // O.S['mwAKey_IP'] := sIp_; // O.S['mwAKey_HOSTNAME'] := sHostName_; // O.S['mwAKey_MAC'] := sMac_; // O.S['KEY_LASTPOLICY'] := sLastPolicy; // end; // // // SaveJsonObjToFile(O, 'c:\a.json'); // sRes := HttpPost(HTTP_, sSvrAddr_, '123120', O.AsString, true); // // // Á¢¼Ó »óŠ󸮸¦ TimerCheckConnect()¿¡¼­ ¿©±â·Î ¿Å±è 23_0324 12:04:45 kku // try // bConnected := sRes <> ''; // if not bConnected then // begin // SetState(asDisconnected); // end else // if not bPrevConnected then // begin // if sRes = POST_TIMEOUT then // bConnected := false // else // SetState(asConnected); // end; // // if bConnected then // begin // // ¿¬°á ó¸® // end; // except // _Trace('Fail .. ConnectionCheck'); // end; // // if not bConnected or (sRes = POST_TIMEOUT) then // goto LB_ProcessPolicy; // // Á¢¼Ó »óÅ ó¸® ³¡ --------------------------------------------------------- // // try // O := SO(sRes); // if O = nil then // begin // _Trace('Invalid PolicyData ... 2'); // exit; // end; // except // _Trace('Invalid PolicyData ... 1'); // exit; // end; // // sTemp := O.S['mwPKey_LOCNAME']; // if sTemp = '' then // goto LB_ProcessPolicy; // // if sPolicyGroup_ <> sTemp then // sPolicyGroup_ := sTemp; // // sTemp := O.S['KEY_LASTPOLICY']; // if (sTemp <> '') and (sLastPolicy <> sTemp) then // begin // sLastPolicy := O.S['KEY_LASTPOLICY']; // dtLastRcvPol_ := StrToDateTime(sLastPolicy); // end; // UpdateAgentInfo; // // LB_ProcessPolicy : // Sleep(4000); // except // on E: Exception do // ETgException.TraceException(Self, E, 'Fail .. Execute()'); // end; // end; //end; end.