2012-12-08 50 views
0

我寫了一個python(3.2)腳本來禁止在Windows 2008服務器上的事件日誌中的某些事件ips,我試圖測試它是否會禁止ips從sql暴力強制嘗試正確。不幸的是,到目前爲止,它沒有進入代碼的那一部分,因爲它所查找的事件ID從不出現(儘管它應該像它在日誌文件中一樣)。不尋常的event.EventID數字像Python中使用win32evtlog Python中的-2147481364

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類似於這些: -1073741823 -2147481364

我有0知道發生了什麼事情。它可以在安全日誌中正常工作,但應用程序日誌似乎是不可行的。

我經歷了一些數據,似乎除了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> 
+0

這是某種形式的問題,我不熟悉Python,但似乎event.EventID有不同的類型(可能更大,所以它可以容納如此龐大的數字)比你期望的...嘗試以這種方式看,也許它可以幫助你。 – Apokal

回答

1

,如果你檢查二進制文件的功能工作正常,它只是增加了1位(或更多,沒有真正檢查它),你不需要。 儘量把答案通過「AND」是這樣的:

答案= event.EventID & 0x1FFFFFFF