94 lines
2.6 KiB
Plaintext
94 lines
2.6 KiB
Plaintext
{*******************************************************}
|
|
{ }
|
|
{ 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.
|