unit unit2;
interface uses Windows, ActiveX, SysUtils, Winsock, ComObj, Variants, Forms, Classes, ComCtrls, Controls, IPMacEdit, IniFiles;
function PlugInName: PChar; stdcall;
procedure LoadDll; stdcall;
procedure UnLoadDll; stdcall;
function Config(GroupID: Integer; Right: Integer): Boolean; stdcall;
function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;
type TLog = record Time: TDateTime;
SrcIP, DstIP: DWORD;
PlugIn, Msg, Link: string;
Act: integer;
end;
PLog = ^TLog;
const Opcode_TOLAN = 1;
const Opcode_TOINT = 2;
const adOpenForwardOnly = 0;
adOpenKeyset = 1;
adOpenDynamic = 2;
adOpenStatic = 3;
adLockReadOnly = 1;
adLockPessimistic = 2;
adLockOptimistic = 3;
adLockBatchOptimistic = 4;
adUseServer = 2;
adUseClient = 3;
procedure SaveConfig;
procedure SaveLogs;
procedure LoadConfig;
function TestConnect(UdlFile: string): Boolean;
function GetModuleName: string;
procedure ClearLogList;
var LogList: TList;
MaxLog: Integer;
DataLink: string;
DbError: Boolean = False;
ADOConn, ADOCmd, ADORs: OLEOBJ_E_FIRST;
implementation //·µ»ØÄ£¿éÃû³ÆÈë¿Úº¯Êý function PlugInName: PChar; stdcall;
begin Result := 'ÈÕÖ¾Êý¾Ý¿âÊä³ö';
end;
//Ä£¿é³õʼ»¯×°ÔØÈë¿Úº¯Êý procedure LoadDll; stdcall;
begin CoInitialize(nil);
ADOConn := CreateOleObject('ADODB.Connection');
ADORs := CreateOleObject('ADODB.RecordSet');
ADORs.CursorLocation := adUseClient;
LoadConfig;
LogList := TList.Create;
end;
//Ä£¿é½áÊøÇ°Ð对ØÈë¿Úº¯Êý procedure UnLoadDll; stdcall;
begin if LogList.Count > 0 then SaveLogs;
ClearLogList;
LogList.Free;
ADORs := Unassigned;
ADOConn := Unassigned;
CoUnInitialize;
end;
//ÈÕÖ¾Èë¿Úº¯Êý function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;
var EnvLog: PLog;
begin Result := 0;
New(EnvLog);
EnvLog^.Time := Now;
if (LENGTH > $22) and (PWORD(@Data[$0C])^ = $0008) then begin case OPCODE of Opcode_TOLAN:
begin EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1A])^);
EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1E])^);
end;
Opcode_TOINT:
begin EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1A])^);
EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1E])^);
end;
end;
end;
EnvLog^.PlugIn := PlugIn;
EnvLog^.Msg := WarnMsg;
EnvLog^.Link := WarnMsg + 256;
EnvLog^.Act := Action and $7;
LogList.Add(EnvLog);
end;
//ÅäÖÃÈë¿Úº¯Êý function Config(GroupID: Integer; Right: Integer): Boolean;
begin end;
function GetModuleName: string;
var szFileName: array[0..MAX_PATH] of Char;
begin GetModuleFileName(hInstance, szFileName, MAX_PATH);
Result := szFileName;
end;
procedure ClearLogList;
var i: integer;
begin for i := 0 to LogList.Count - 1 do begin Dispose(PLog(LogList.Items[i]));
end;
LogList.Clear;
end;
//´ò¿ªÅäÖú¯Êý procedure LoadConfig;
var IniFile: TIniFile;
begin IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
MaxLog := IniFile.ReadInteger('Config', 'MaxLog', 100);
DataLink := IniFile.ReadString('Config', 'DataLink', ExtractFilePath(Application.ExeName) + 'PlugIns/DbLink.udl');
IniFile.Free;
end;
procedure SaveConfig;
var IniFile: TIniFile;
begin IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
IniFile.WriteInteger('Config', 'MaxLog', MaxLog);
IniFile.WriteString('Config', 'DataLink', DataLink);
IniFile.Free;
DbError := False;
end;
procedure SaveLogs;
var LogItem: PLog;
IP: TIP;
i: Integer;
begin if DbError then Exit;
try ADOConn.Open('File Name=' + DataLink + ';');
except DbError := True;
Exit;
end;
try ADORs.Open('SELECT * FROM EventLog WHERE 0=1', ADOConn, adOpenKeyset, adLockBatchOptimistic);
except ADOConn.Close;
DbError := True;
Exit;
end;
IP := TIP.Create;
try for i := 0 to LogList.Count - 1 do begin LogItem := LogList.Items[i];
ADORs.AddNew;
ADORs.Fields.Item['EventTime'].Value := LogItem^.Time;
IP.DIP := LogItem^.SrcIP;
ADORs.Fields.Item['SrcIP'].Value := IP.IPString;
IP.DIP := LogItem^.DstIP;
ADORs.Fields.Item['DstIP'].Value := IP.IPString;
ADORs.Fields.Item['PlugIn'].Value := LogItem^.PlugIn;
ADORs.Fields.Item['Act'].Value := LogItem^.Act;
ADORs.Fields.Item['Msg'].Value := LogItem^.Msg;
ADORs.Fields.Item['Res'].Value := LogItem^.Link;
end;
ADORs.UpdateBatch;
except ADORs.CancelUpdate;
DbError := True;
end;
IP.Free;
ADORs.Close;
ADOConn.Close;
end;
function TestConnect(UdlFile: string): Boolean;
begin try ADOConn.Open('File Name=' + UdlFile + ';');
except Result := False;
Exit;
end;
try ADORs.Open('SELECT EventTime,SrcIP,DstIP,PlugIn,Act,Msg,Res FROM EventLog WHERE ID=0', ADOConn, adOpenKeyset, adLockBatchOptimistic);
except ADOConn.Close;
Result := False;
Exit;
end;
ADORs.Close;
ADOConn.Close;
Result := True;
end;
end.
unit2;
interface
uses Windows, ActiveX, SysUtils, Winsock, ComObj, Variants, Forms, Classes, ComCtrls, Controls, IPMacEdit, IniFiles;
function PlugInName: PChar; stdcall;
procedure LoadDll; stdcall;
procedure UnLoadDll; stdcall;
function Config(GroupID: Integer; Right: Integer): Boolean; stdcall;
function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;
type
TLog = record
Time: TDateTime;
SrcIP, DstIP: DWORD;
PlugIn, Msg, Link: string;
Act: integer;
end;
PLog = ^TLog;
const
Opcode_TOLAN = 1;
const
Opcode_TOINT = 2;
const
adOpenForwardOnly = 0;
adOpenKeyset = 1;
adOpenDynamic = 2;
adOpenStatic = 3;
adLockReadOnly = 1;
adLockPessimistic = 2;
adLockOptimistic = 3;
adLockBatchOptimistic = 4;
adUseServer = 2;
adUseClient = 3;
procedure SaveConfig;
procedure SaveLogs;
procedure LoadConfig;
function TestConnect(UdlFile: string): Boolean;
function GetModuleName: string;
procedure ClearLogList;
var
LogList: TList;
MaxLog: Integer;
DataLink: string;
DbError: Boolean = False;
ADOConn, ADOCmd, ADORs: OLEOBJ_E_FIRST;
implementation
//·µ»ØÄ£¿éÃû³ÆÈë¿Úº¯Êý
function PlugInName: PChar; stdcall;
begin
Result := 'ÈÕÖ¾Êý¾Ý¿âÊä³ö';
end;
//Ä£¿é³õʼ»¯×°ÔØÈë¿Úº¯Êý
procedure LoadDll; stdcall;
begin
CoInitialize(nil);
ADOConn := CreateOleObject('ADODB.Connection');
ADORs := CreateOleObject('ADODB.RecordSet');
ADORs.CursorLocation := adUseClient;
LoadConfig;
LogList := TList.Create;
end;
//Ä£¿é½áÊøÇ°Ð对ØÈë¿Úº¯Êý
procedure UnLoadDll; stdcall;
begin
if LogList.Count > 0 then SaveLogs;
ClearLogList;
LogList.Free;
ADORs := Unassigned;
ADOConn := Unassigned;
CoUnInitialize;
end;
//ÈÕÖ¾Èë¿Úº¯Êý
function LogProc(GroupID: Integer; Data: PByteArray; Length: ULONG; OPCODE: ULONG; Action: ULONG; PlugIn: PChar; WarnMsg: PChar): Integer; stdcall;
var
EnvLog: PLog;
begin
Result := 0;
New(EnvLog);
EnvLog^.Time := Now;
if (LENGTH > $22) and (PWORD(@Data[$0C])^ = $0008) then
begin
case OPCODE of
Opcode_TOLAN:
begin
EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1A])^);
EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1E])^);
end;
Opcode_TOINT:
begin
EnvLog^.SrcIP := ntohl(PDWORD(@DATA[$1A])^);
EnvLog^.DstIP := ntohl(PDWORD(@DATA[$1E])^);
end;
end;
end;
EnvLog^.PlugIn := PlugIn;
EnvLog^.Msg := WarnMsg;
EnvLog^.Link := WarnMsg + 256;
EnvLog^.Act := Action and $7;
LogList.Add(EnvLog);
end;
//ÅäÖÃÈë¿Úº¯Êý
function Config(GroupID: Integer; Right: Integer): Boolean;
begin
end;
function GetModuleName: string;
var
szFileName: array[0..MAX_PATH] of Char;
begin
GetModuleFileName(hInstance, szFileName, MAX_PATH);
Result := szFileName;
end;
procedure ClearLogList;
var
i: integer;
begin
for i := 0 to LogList.Count - 1 do
begin
Dispose(PLog(LogList.Items[i]));
end;
LogList.Clear;
end;
//´ò¿ªÅäÖú¯Êý
procedure LoadConfig;
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
MaxLog := IniFile.ReadInteger('Config', 'MaxLog', 100);
DataLink := IniFile.ReadString('Config', 'DataLink', ExtractFilePath(Application.ExeName) + 'PlugIns/DbLink.udl');
IniFile.Free;
end;
procedure SaveConfig;
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(ExtractFilePath(GetModuleName) + 'LogtoDb.ini');
IniFile.WriteInteger('Config', 'MaxLog', MaxLog);
IniFile.WriteString('Config', 'DataLink', DataLink);
IniFile.Free;
DbError := False;
end;
procedure SaveLogs;
var
LogItem: PLog;
IP: TIP;
i: Integer;
begin
if DbError then Exit;
try
ADOConn.Open('File Name=' + DataLink + ';');
except
DbError := True;
Exit;
end;
try
ADORs.Open('SELECT * FROM EventLog WHERE 0=1', ADOConn, adOpenKeyset, adLockBatchOptimistic);
except
ADOConn.Close;
DbError := True;
Exit;
end;
IP := TIP.Create;
try
for i := 0 to LogList.Count - 1 do
begin
LogItem := LogList.Items[i];
ADORs.AddNew;
ADORs.Fields.Item['EventTime'].Value := LogItem^.Time;
IP.DIP := LogItem^.SrcIP;
ADORs.Fields.Item['SrcIP'].Value := IP.IPString;
IP.DIP := LogItem^.DstIP;
ADORs.Fields.Item['DstIP'].Value := IP.IPString;
ADORs.Fields.Item['PlugIn'].Value := LogItem^.PlugIn;
ADORs.Fields.Item['Act'].Value := LogItem^.Act;
ADORs.Fields.Item['Msg'].Value := LogItem^.Msg;
ADORs.Fields.Item['Res'].Value := LogItem^.Link;
end;
ADORs.UpdateBatch;
except
ADORs.CancelUpdate;
DbError := True;
end;
IP.Free;
ADORs.Close;
ADOConn.Close;
end;
function TestConnect(UdlFile: string): Boolean;
begin
try
ADOConn.Open('File Name=' + UdlFile + ';');
except
Result := False;
Exit;
end;
try
ADORs.Open('SELECT EventTime,SrcIP,DstIP,PlugIn,Act,Msg,Res FROM EventLog WHERE ID=0', ADOConn, adOpenKeyset, adLockBatchOptimistic);
except
ADOConn.Close;
Result := False;
Exit;
end;
ADORs.Close;
ADOConn.Close;
Result := True;
end;
end.
批量插入
最新推荐文章于 2024-04-13 21:32:22 发布