使用xpath中的python + win32evtlog + timestamp过滤器查询Windows事件日志不会正确返回结果

时间:2017-06-25 17:26:39

标签: python xpath pywin32

我正在尝试使用以下代码查询Windows事件日志(特别是Sysmon创建的日志):

SYSMON_XPATH_QUERY = """<QueryList><Query Id="0" Path="{event_log_path}"><Select Path="{event_log_path}">*[System[TimeCreated[@SystemTime>='{event_timestamp}']]]</Select></Query></QueryList>"""
SYSMON_EVENT_LOG_PATH = "Microsoft-Windows-Sysmon/Operational"
event_timestamp = "2017-06-25T17:13:00.453530200Z"  

while True:
    query_handle = win32evtlog.EvtQuery(
            SYSMON_EVENT_LOG_PATH,
            win32evtlog.EvtQueryForwardDirection,
            SYSMON_XPATH_QUERY.format(
                event_log_path=SYSMON_EVENT_LOG_PATH,
                event_timestamp=event_timestamp),
            None)
    event = win32evtlog.EvtNext(query_handle, 1, 1, 0)
    while event:
        # converting the event to xml and then python object -> result in sysmon_record
        ...
        event_timestamp = sysmon_record.TimeCreated # the same parameter I query on
        event = win32evtlog.EvtNext(...)

如果我将event_timestamp设置为当前时间之前约一小时,则查询将返回从该时间到最新事件的所有事件,然后停止返回结果。 我认为这可能是我的转换中的问题,但后来我尝试将event_timestamp设置为当前时间前半小时并再次执行脚本,我没有得到任何结果。

额外细节:

  • 我使用Windows事件查看器构建了XPATH查询。
  • 当我在事件查看器中执行不在自定义视图过滤器中返回任何结果的相同查询时,我得到了预期的结果。
  • Python版本:ActivePython 2.7.10.12
  • Windows版本:Windows 10 Pro

提前致谢

修改 似乎在运行我的代码之前清理事件日志解决了问题...
我不是把它作为答案发布,因为它显然不是解决方案。我没有做更多的研究,因为我不介意清理日志(我不关心过去的事件)。

0 个答案:

没有答案