如何从Python win32evtlog获取其他信息?

1 投票
2 回答
2172 浏览
提问于 2025-04-18 01:20

使用win32evtlog,我可以获取以下信息:

events = win32evtlog.ReadEventLog(loghandle, flags, 0)
while events:
    for event in events:
        print 'Event Category:', event.EventCategory
        print 'Time Generated:', event.TimeGenerated
        print 'Source Name:', event.SourceName
        print 'Event ID:', event.EventID
        print 'Event Type:', event.EventType
        data = event.StringInserts
        if data:
            print 'Event Data:'
            for msg in data:
                print msg
    events = win32evtlog.ReadEventLog(loghandle, flags, 0)

但是如果我们看看事件的结构:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
  <Provider Name="PRNAME" /> 
  <EventID Qualifiers="0">18</EventID> 
  <Level>0</Level> 
  <Task>0</Task> 
  <Keywords>0xa0000000000000</Keywords> 
  <TimeCreated SystemTime="2012-04-03T05:30:02.000000000Z" /> 
  <EventRecordID>2387524</EventRecordID> 
  <Channel>PRNAME</Channel> 
  <Computer>A00001</Computer> 
  <Security /> 
  </System>
- <EventData>
  <Data>tst</Data> 
  <Binary>01020304</Binary> 
  </EventData>
  </Event>

我们可以发现还有一些额外的信息:

  • 频道名称 - 这和提供者名称是不同的
  • 事件记录ID
  • 计算机
  • 二进制数据

还有其他信息。我该如何获取这些信息呢?我特别需要二进制数据和事件记录ID,但我想应该有办法从事件日志中获取所有数据。

2 个回答

0

你试过这个吗?

events = win32evtlog.ReadEventLog(loghandle, flags, 0)
if events:
  print dir(events[0])

我自己找到了你想要的一些字段:

  • 记录编号
  • 计算机名称
0

如果你不介意使用BeautifulSoup来处理xml格式的数据,这里有一个例子。

from bs4 import BeautifulSoup

soup = BeautifulSoup(event_log_as_xml)

print soup.find("channel").text
print soup.find("eventrecordid").text
print soup.find("computer").text
print soup.find("binary").text

撰写回答