使用Pywin32中的Win32 EVTLOG在Python中使用-2147481364这样的异常event.EventID数字

使用Pywin32中的Win32 EVTLOG在Python中使用-2147481364这样的异常event.EventID数字,python,event-log,pywin32,event-id,Python,Event Log,Pywin32,Event Id,我编写了一个python(3.2)脚本,以禁止Windows 2008服务器上事件日志中某些事件的IP,并尝试测试它是否会正确禁止sql暴力强制尝试的IP。不幸的是,到目前为止,它还没有到达代码的这一部分,因为它要查找的事件ID从未出现过(尽管它应该与日志文件中的一样) def run_script_application_log(): EventId=[18456]#查找要处理的这些事件,以查找可能的ip禁令18456=登录失败 服务器='localhost'#要从中获取事件日志的目标计算机的

我编写了一个python(3.2)脚本,以禁止Windows 2008服务器上事件日志中某些事件的IP,并尝试测试它是否会正确禁止sql暴力强制尝试的IP。不幸的是,到目前为止,它还没有到达代码的这一部分,因为它要查找的事件ID从未出现过(尽管它应该与日志文件中的一样)

def run_script_application_log():
EventId=[18456]#查找要处理的这些事件,以查找可能的ip禁令18456=登录失败
服务器='localhost'#要从中获取事件日志的目标计算机的名称
日志类型='Application'#'Application'或'Security'等。。。
hand=win32evtlog.OpenEventLog(服务器,日志类型)
ipsToBan=寻找ips到ban(手牌、旗帜、事件ID)
def look_for_ips_to_ban(手牌、旗帜、事件ID):
…一些代码。。。。
事件=1
而活动:
events=win32evtlog.ReadEventLog(手动,标志,0)
对于事件中的事件:
_time=event.TimeGenerated.Format()
秒=日期秒(时间)
#如果秒<开始秒-时间秒:中断
如果EventID中有event.EventID:
我插入了一个简单的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>

18456
0
4.
0x9000000000000
4532
应用
窗机
用户名
原因:密码与提供的登录名不匹配。

[CLIENT:如果您检查它,则函数工作正常,它只添加了您不需要的1位(或更多,没有真正检查)。 试着用“和”这样的方式回答:


answer=event.EventID&0x1ffffffff

这是某种格式问题,我对Python不太熟悉,但event.EventID的类型(可能更大,所以它可以容纳如此大的数字)似乎与您预期的不同。。。试着这样看,也许对你有帮助。
<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>