我正在尝试使用以下代码查询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设置为当前时间前半小时并再次执行脚本,我没有得到任何结果。
额外细节:
提前致谢
修改
似乎在运行我的代码之前清理事件日志解决了问题...
我不是把它作为答案发布,因为它显然不是解决方案。我没有做更多的研究,因为我不介意清理日志(我不关心过去的事件)。