在xpath中使用python+win32evtlog+timestamp filter查询Windows事件日志时无法正确返回结果

2024-04-25 13:56:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用以下代码查询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

提前谢谢

编辑: 似乎在运行代码之前清理事件日志可以解决问题…
我不会把它作为答案贴出来,因为这显然不是一个解决方案。我不再做任何研究,因为我不介意清理日志(我不在乎过去的事情)。在


Tags: path代码eventlogwindows时间事件query