C#EventViewer日志解析

时间:2018-06-20 01:58:22

标签: c# logging event-viewer

我负责解析转发的EventViewer(evt)日志(Windows 7?)。为此,我使用Log Parser 2.2在日志上运行查询,并提取特定的EventID并将其写入CSV文件。但是,我正在考虑使用EventViewerReader来代替。

我在这些evt上执行的查询包括一个“字符串”列,该列通常以以下格式输出一堆垃圾:SID | Username | Usergroup | ...,但不一致。我想要的是一种一致的方式来获取这些事件的用户名并过滤出无用的数据。问题是我不理解输出的格式。我想知道这些事件是否具有标准格式,或者这是我工作中的自定义格式?我现在使用的方法基本上是查找已知的用户组,并在它们的左侧检查潜在的用户名(跳过“本地服务”,“网络服务”,“-”和其他一些关键字)。这种方法的问题是我不了解所有用户组,而且我可以在用户名上得到假阳性。

以下是我正在查看的EventID Codeshttps://www.ultimatewindowssecurity.com/securitylog/quickref/downloads/quickref.zip

4624    An account was successfully logged on
4625    An account failed to log on
4647    User initiated logoff
4648    A logon was attempted using explicit credentials
4800    The workstation was locked
4801    The workstation was unlocked
4802    The screen saver was invoked
4803    The screen saver was dismissed

1 个答案:

答案 0 :(得分:0)

我最终仔细查看了evt文件,发现它们具有一套XML模式。 “字符串”实际上不是元素,而是EventData子Data元素的并置值。我所做的就是查看每个EventID的架构,并找到每种事件类型中用户名的深度。

我认为它是用于登录/注销的字符串[5](TargetUserName),用于其他夫妇的字符串[0]和用于其他夫妇的字符串[1]。

<EventData>
  <Data Name="SubjectUserSid">S-1-5-18</Data> 
  <Data Name="SubjectUserName">XXX-PC$</Data> 
  <Data Name="SubjectDomainName">WORKGROUP</Data> 
  <Data Name="SubjectLogonId">0x3e7</Data> 
  <Data Name="TargetUserSid">S-1-5-18</Data> 
  <Data Name="TargetUserName">SYSTEM</Data> 
  <Data Name="TargetDomainName">NT AUTHORITY</Data> 
  <Data Name="TargetLogonId">0x3e7</Data>
...
</EventData>