Python文件完整性监控

时间:2013-02-17 21:44:43

标签: python file hash for-loop md5

我编写了以下代码但无法使其正常工作,我看不出原因。代码:

  1. 读取目标文件列表
  2. 循环浏览目录
  3. 在文件上运行MD5哈希
  4. 检查activefile以查找所述文件的先前md5哈希值
  5. 如果文件是新文件,则会将其记录为新文件
  6. 如果日志已存在但已更改,则会写入更改并记录更改
  7. 如果不是新的,没有变化,那么什么都不做
  8. 以下是代码:

    import hashlib
    import logging as log
    import optparse
    import os
    import re
    import sys
    import glob
    import shutil
    
    def md5(fileName):
        """Compute md5 hash of the specified file"""
        try:
            fileHandle = open(fileName, "rb")
        except IOError:
            return
        m5Hash = hashlib.md5()
        while True:
            data = fileHandle.read(8192)
            if not data:
                break
            m5Hash.update(data)
        fileHandle.close()
        return m5Hash.hexdigest()
    
    req = open("requested.txt")
    for reqline in req:
        reqName = reqline[reqline.rfind('/') + 1:len(reqline) - 1]
        reqDir = reqline[0:reqline.rfind('/') + 1] 
        tempFile = open("activetemp.txt", 'w') 
        for name in glob.glob(reqDir + reqName):    
            fileHash = md5(name) 
            actInt = 0
            if fileHash != None:
    
                actFile = open("activefile.txt")
    
                for actLine in actFile:
                    actNameDir = actLine[0:actLine.rfind(' : ')]
                    actHash = actLine[actLine.rfind(' : ') + 3:len(actLine) -1]
                    if actNameDir == name and actHash == fileHash:
                        tempFile.write(name + " : " + fileHash + "\n")
                        actInt = 1 
                        print fileHash
                        print actHash
                        print name
                        print actNameDir
                    if actNameDir == name and actHash != fileHash:
                        fimlog = open("fimlog.txt", 'a')
                        tempFile.write(name + " : " + actHash + "\n")         
                        actInt = 1
                        fimlog.write("FIM Log: The file " + name +  " was modified: " + actHash + "\n") 
                if actInt == 0: 
                    fimlog = open("fimlog.txt", 'a')
                    fimlog.write("FIM Log: The file " + name +  " was created: " + fileHash + "\n")
                    tempFile.write(name + " : " + fileHash + "\n")                       
    
    shutil.copyfile("activetemp.txt", "activefile.txt")
    

1 个答案:

答案 0 :(得分:1)

你从来没有真正描述过这个问题,但一个可能的罪魁祸首是你永远不会关闭tempFile(或其他文件),所以最后的文件副本可能会失败。