{*******************************************************} { } { ThdRouteMon } { } { Copyright (C) 2022 kku } { } {*******************************************************} unit ThdRouteMon; interface uses Tocsg.Thread, System.SysUtils, System.Classes, Winapi.Windows; type TThdRouteMon = class(TTgThread) protected procedure Execute; override; end; implementation uses Tocsg.Network, Tocsg.Exception, ManagerService, GlobalDefine; { TThdRouteMon } procedure TThdRouteMon.Execute; var ChkList, RouteList: TRouteEntList; i: Integer; sDestIp, sNextHop, sMask: String; begin ChkList := nil; RouteList := nil; try while not Terminated and not GetWorkStop do begin try if RouteList = nil then begin RouteList := TRouteEntList.Create; GetRouteTables(RouteList); end else begin if ChkList = nil then ChkList := TRouteEntList.Create; GetRouteTables(ChkList); if RouteList.Count < ChkList.Count then begin for i := ChkList.Count - 1 downto 0 do begin if RouteList.GetEntByDestIp(ChkList[i].sDestIp) = nil then begin if DeleteIpForwardEntry(@ChkList[i].Info) = NO_ERROR then begin sDestIp := ChkList[i].sDestIp; sNextHop := DWORDToIP(ChkList[i].Info.dwForwardNextHop, false); sMask := DWORDToIP(ChkList[i].Info.dwForwardMask, false); ChkList.Delete(i); gMgSvc.SendEventLog(URI_USER_ACTION, LOGCODE_PREVENT_ROUTE, Format('Routing table Prevented : %s, %s (%s)', [sDestIp, sNextHop, sMask])); gMgSvc.PopupMessage(TYPE_MSG_PREVENT_ROUTERCHANGE, sDestIp + '|' + sNextHop + '|' + sMask); end; end; end; FreeAndNil(RouteList); RouteList := ChkList; ChkList := nil; end; end; except on E: Exception do ETgException.TraceException(Self, E, 'Fail .. Execute()'); end; Sleep(1000); end; finally if RouteList <> nil then FreeAndNil(RouteList); if ChkList <> nil then FreeAndNil(ChkList); end; end; end.