Python 文件完整性监控

0 投票
1 回答
2414 浏览
提问于 2025-04-17 16:12

我写了以下代码,但它无法正常工作,我也不知道为什么。代码的功能如下:

  1. 读取目标文件的列表
  2. 遍历各个目录
  3. 对文件进行MD5哈希处理
  4. 检查当前文件是否在之前的记录中有MD5哈希值
  5. 如果这个文件是新的,就记录为新文件
  6. 如果记录中已经存在但文件有变化,就记录这个变化
  7. 如果文件既不是新文件也没有变化,那就什么都不做

以下是代码:

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 个回答

1

你没有详细描述问题,但一个可能的原因是你没有关闭tempFile(或者其他文件),这样最后的文件复制可能会失败。

撰写回答