不常见的event.EventID数字,如Python中的-2147481364,使用Pywin32的win32evtlog

时间:2012-12-08 17:32:59

标签: python event-log pywin32 event-id

我编写了一个python(3.2)脚本来禁止来自Windows 2008服务器上事件日志的某些事件的ips,我试图测试它是否会禁止来自sql暴力的ips强制尝试正确。不幸的是到目前为止它没有达到代码的那一部分,因为它正在寻找的事件ID永远不会出现(虽然它应该像在日志文件中一样)。

def run_script_application_log():
    eventIds = [18456] #look for these events to process for possible ip bans 18456 = failed login
    server = 'localhost' # name of the target computer to get event logs from
    logtype = 'Application' # 'Application' or 'Security' etc...
    hand = win32evtlog.OpenEventLog(server,logtype)
    ipsToBan = look_for_ips_to_ban(hand,flags,eventIds)

def look_for_ips_to_ban(hand, flag, eventIds):
    ...some code....
    events=1
    while events:
        events=win32evtlog.ReadEventLog(hand,flag,0)
        for event in events:
            the_time=event.TimeGenerated.Format()
            seconds=date2sec(the_time)
            #if seconds < begin_sec - time_in_seconds: break
            if event.EventID in eventIds:

我插入了一个简单的print语句来查看event.EventID发生了什么,它获得的数字至少是奇怪的。事件日志最多可达33090,但返回的绝大多数ID与以下类似: 1073750020 1073754112 -1073741823 -2147481364

我知道发生了什么事。它与安全日志一起工作正常,但应用程序日志似乎不行。

我浏览了一些数据,除了eventID外,它们似乎都正确报告。

例如,日志中的这条记录都是正确的,除了它将事件ID显示为1073742726而不是18456。

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="MSSQLSERVER" /> 
<EventID Qualifiers="49152">18456</EventID> 
<Level>0</Level> 
<Task>4</Task> 
<Keywords>0x90000000000000</Keywords> 
<TimeCreated SystemTime="2012-12-08T18:01:32.000000000Z" /> 
<EventRecordID>4532</EventRecordID> 
<Channel>Application</Channel> 
<Computer>windowsmachine</Computer> 
<Security /> 
</System>
<EventData>
<Data>username</Data> 
<Data>Reason: Password did not match that for the login provided.</Data> 
<Data>[CLIENT: <local machine>]</Data
<Binary>184800000E0000000A000000570049004E004D00430041005000460058000000070000006D00610073007400650072000000</Binary> 
</EventData>
</Event>

1 个答案:

答案 0 :(得分:1)

如果你检查它二进制,该函数工作正常,它只是添加了1位(或更多,没有真正检查它)你不需要。 试着通过这样的“AND”来回答:

answer = event.EventID&amp; 0x1FFFFFFF