我有4个列表:
"评论家"
[ade4c7059e17ab9e47d2aaec6cf04a9d, 882edee4cc71806190ca43993e8b2eb5, nekspzwjxhqroiu.com, htfbzqewll.org]`
"主"
[4d7d1c89529bcfcbbbbf9d6a2ba42cb5, 9f26da4de1653f609e7b4bcaade63daa]
然后每个功能都有MD5的单独列表 - [ex。49F12A7B358C7F7CBA005610210418AA]" MD5-ThreatExpert"one_answers" MD5-杂交分析",这两个功能都将我重命名为" MD5 Threat"。
,然后在每个功能中,我都在尝试将"批评者"one_answers"掌握"与" md5 threat"进行比较。
" MD5 threat"中的任何内容都不在"批评者"或"主"中添加到" md5brounput"中。
和如果已将其添加到" MD5Broutput"中,则还附加回" Master"。
" md5broutput"是每天都是新的,我每周都会擦拭"主"。
def md5threatexpertcritical():
filename = open("md5-ThreatExpert-bro", 'w') #input file for bro script gone through critical checks
md5threat = "md5-ThreatExpert" #latest md5's from MISP
#create bromaster if doesn't exist
if os.path.exists("bromasterlist"):
pass
else:
f = file("bromasterlist", "w")
f.close()
master = "bromasterlist" #master bro list that we've already added to bro
PATH = "/opt/critical-stack/frameworks/intel"
CRITICAL = "master-public.bro.dat"
CRITICALSTACK = os.path.join(PATH, CRITICAL)
criticallist = "/home/money/Documents/hybrid/critical"
whitelist = open(criticallist,'w')
with open(CRITICALSTACK,'r') as CRITICALSTACK1:
reader = csv.reader(CRITICALSTACK1, delimiter='t')
CRITICAL = []
for row in reader:
CRITICAL.append(row[0])
whitelist.write("n".join(CRITICAL))
x=[]
y=[]
z=[]
md5broinput=[]
with open(criticallist, 'r') as critical:
for line in critical:
line = line.strip()
x.append(line)
with open(master, 'r') as bromaster:
for line in bromaster:
line = line.strip()
y.append(line)
with open(md5threat, 'r') as md5threat:
for line in md5threat:
line = line.strip()
z.append(line)
for md5 in z:
if md5 in y:
print md5+" is in bromaster"
pass
elif md5 in x:
print md5+" is in critical"
pass
elif md5 not in x and y:
y.append(md5)
md5broinput.append(md5)
filename.write("n".join(md5broinput))
filename.close()
f=open(master,'a')
f.write("n".join(set(y)))
f.write("n")
f.close()
def md5hybridanalysiscritical():
filename = open("md5-HybridAnalysis-bro", 'w+')
md5threat = "md5-HybridAnalysis" #latest md5's from MISP
master = "bromasterlist" #master bro list that we've already added to bro
PATH = "/opt/critical-stack/frameworks/intel"
CRITICAL = "master-public.bro.dat"
CRITICALSTACK = os.path.join(PATH, CRITICAL)
criticallist = "/home/money/Documents/hybrid/critical"
x=[]
y=[]
z=[]
md5broinput=[]
with open(criticallist, 'r') as critical:
for line in critical:
line = line.strip()
x.append(line)
with open(master, 'r') as bromaster:
for line in bromaster:
line = line.strip()
y.append(line)
with open(md5threat, 'r') as md5threat:
for line in md5threat:
line = line.strip()
z.append(line)
for md5 in z:
if md5 in y:
print md5+" is in bromaster"
pass
elif md5 in x:
print md5+" is in critical"
pass
elif md5 not in x and y:
y.append(md5)
md5broinput.append(md5)
filename.write("n".join(md5broinput))
filename.close()
f=open(master,'a')
f.write("n".join(set(y)))
f.write("n")
f.close()
尝试作为代码的重构。当list comprehension
更具Pythonic时,代码将"with"
用作上下文。添加@nbryans答案..
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
filename = open("md5-HybridAnalysis-bro", 'wb+')
md5threat = open("md5-HybridAnalysis" , 'rb') #
x = [line.strip() for line in criticallist ]
y = [line.strip() for line in master]
z = [line.strip() for line in md5threat]
md5broinput = []
#print x[:6]
#print y[:6]
#print z[:6]
for md5 in z:
if md5 in y:
print md5+" is in bromaster"
elif md5 in x:
print md5+" is in critical"
else:
y.append(md5)
md5broinput.append(md5)
filename.write("n".join(md5broinput))
filename.close()
f=open(master,'a')
f.write("n".join(y))
f.write("n")
f.close()
如果我正确理解这个问题,您想要
for md5 in z:
if md5 in y:
print md5+" is in bromaster"
pass
正如现在所写的那样,您在检查if md5 not in y
( y
as Master。
因此,当MD5不在y中时,代码说的是,如果但没有附加的其他。
。当前代码:
for md5 in z:
if md5 not in y:
print md5+" is in bromaster"
pass
elif md5 in x:
print md5+" is in critical"
pass
else:
y.append(md5)
md5broinput.append(md5)
我认为代码应该说:
for md5 in z:
if md5 in y: #<--- This is the line changed
print md5+" is in bromaster"
pass
elif md5 in x:
print md5+" is in critical"
pass
else:
y.append(md5)
md5broinput.append(md5)
我建议清理代码,以免在您想相互比较的许多信息中丢失。一种方法是不要将批评家的内容命名为x(当检索为列表时)等待一秒钟...
这呢:
#! /usr/bin/env python
from __future__ import print_function
md5threat = "md5-HybridAnalysis"
criticallist = "some_criticallist.txt"
master = "some_master.txt"
x_crit, y_mast, z_md5t = [], [], []
md5broinput = []
with open(criticallist, 'r') as critical:
for line in critical:
x_crit.append(line.strip())
with open(master, 'r') as bromaster:
for line in bromaster:
y_mast.append(line.strip())
with open(md5threat, 'r') as md5threat:
for line in md5threat:
z_md5t.append(line.strip())
for a_md5 in z_md5t:
if a_md5 in y_mast:
print(a_md5 + " is in bromaster")
pass
elif a_md5 in x_crit:
print(a_md5 + " is in critical")
pass
else:
y_mast.append(a_md5)
md5broinput.append(a_md5)
with open("md5-HybridAnalysis-bro", 'w+') as o_f:
o_f.write("n".join(md5broinput))
with open(master, 'a') as m_f:
m_f.write("n".join(y_mast) + 'n')
,然后是@nbryans已经发现了变化:
for a_md5 in z_md5t:
if a_md5 not in y_mast:
print(a_md5 + " is in bromaster")
pass
to:
for a_md5 in z_md5t:
if a_md5 in y_mast:
print(a_md5 + " is in bromaster")
pass
我更喜欢@merlins回答。如果您想进一步使用上下文经理,同时构建完整列表,那么为什么不先从文件加载,一个接一个地将块留下来,而不是执行分析性匹配循环 - 以具有串行收集阶段和一个聚焦组合Algortihm仅与列表。
感谢@Merlin为您提供了非常感谢,我正在以理解为重新加工。我给你点了,应该只是为此!
如果您查看我犯了错误的位置,我正在检查列表y,然后在循环中的末端附加到它,所以这就像一个永无止境的循环 -
我替换 -
for md5 in z:
if md5 in y:
print md5+" is in bromaster"
pass
elif md5 in x:
print md5+" is in critical"
pass
elif md5 not in x and y:
y.append(md5) #I got rid of this line and it works great.
md5broinput.append(md5)
与 -
for md5 in z:
if md5 in y:
print md5+" is in bromaster"
pass
elif md5 in x:
print md5+" is in critical"
pass
elif md5 not in x and y:
md5broinput.append(md5)
我很感激我希望在某个时候我在这里帮助新秀!