需求:需要对现网三千多台服务器的配置进行相同路径下的域名,证书,及插件的内容对比,输出一版不同版本数据到表中
文件内容对比这块选用了md5加密来校验对比内容,因为md5一种被广泛使用的密码散列函数,可以产生出一个散列值,用于确保信息传输完整一致
以下是用来校验lua插件信息的python脚本
import os
import json
from os import path
import hashlib
# md5加密校验
def md5sum(filename):
with open(filename, "r") as f:
fcont = f.read()
fmd5 = hashlib.md5(fcont.encode())
print(fmd5)
return fmd5.hexdigest()
# 文件递归校验函数
def dir_file(wj_url):
file = os.listdir(wj_url)
for g in file:
rel_url = path.join(wj_url, g)
if path.isfile(rel_url):
if wj_url.endswith('.lua'):
path.abspath(rel_url)
elif path.isdir(rel_url):
dir_file(rel_url)
return rel_url
def scaner_file(url):
l = []
file = os.listdir(url)
for f in file:
real_url = path.join(url, f)
re_url = os.listdir(real_url)
for i in re_url:
if i == 'trafficserver' or i == 'nginx':
l_url = path.join(real_url, i)
r_url = os.listdir(l_url)
for lua in r_url:
if lua == 'lua':
lu_url = path.join(l_url, lua)
if path.isdir(lu_url):
lua_url = os.listdir(lu_url)
for wj in lua_url:
wj_url = path.join(lu_url, wj)
# 如果是文件,则以绝度路径的方式输出
if path.isfile(wj_url):
if wj_url.endswith('.lua'):
l.append(path.abspath(wj_url))
elif path.isdir(wj_url):
# 如果是目录,则是递归校验函数 scaner_file (url)进行多次
l.append(dir_file(wj_url))
else:
continue
return l
# 校验文件内容
def count_url(url):
count_x = scaner_file(url)
for i in count_x:
if all([i]):
if i.endswith('.lua'):
cc = i.split('/')[5::]
fuwuqi_url = '/{}'.format('/'.join(cc))
# print(fuwuqi_url)
with open('/home/hkxpz/ceshu/39.137.42.235.txt','r') as f:
jx_url= f.read()
jx_u = json.loads(jx_url)
for jx in jx_u:
if all([jx]):
if jx.endswith('.lua'):
cc = jx.split('/')[5::]
jxfw_url = '/{}'.format('/'.join(cc))
if jxfw_url == fuwuqi_url:
if md5sum(jx) == md5sum(i):
print('文件内容一致,文件名{}'.format(i))
else:
print('文件内容不一致,文件名{}'.format(i))
if __name__ == '__main__':
count_url("/home/hkxpz/pg")