2016-06-14 6 views
-2

anhängt Ich habe 4 Listen:Python Überprüfung drei Listen bis vierten

"criticallist" `

[ade4c7059e17ab9e47d2aaec6cf04a9d, 882edee4cc71806190ca43993e8b2eb5, nekspzwjxhqroiu.com, htfbzqewll.org]` 

"Master"

[4d7d1c89529bcfcbbbbf9d6a2ba42cb5, 9f26da4de1653f609e7b4bcaade63daa] 

und dann jede Funktion hat separate Listen von md5 ist - [Ex. 49f12a7b358c7f7cba005610210418aa] "md5-ThreatExpert" und "md5-HybridAnalysis", beide innerhalb ihrer jeweiligen Funktionen, die ich in "md5threat" umbenennen.

und dann in jeder Funktion versuche ich "criticallist" und "Master" gegen "md5threat" zu vergleichen.

Alles von "md5threat", das weder "criticallist" noch "master" ist, wird zu "md5broinput" hinzugefügt.
AND Wenn es zu "md5broinput" hinzugefügt wird, wird es auch an "master" angehängt.

"md5broinput" ist jeden Tag neu und ich wische "Master" jede Woche.

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() 
+0

Der erste Satz Ihrer Frage Sais Sie haben vier Listen namens "criticallist, master, md5threat, md5broinput", ** Nur eine davon ist eine Liste in Ihrem Code ** die anderen Listen werden von den Variablen 'x notiert, y, z ', was es nach dem Lesen der Beschreibungen über die "Master" -Liste und andere viel schwieriger zu verstehen macht. –

Antwort

3

dies versuchen, so Umgestalten des Codes. Der Code verwendet "with" als Kontext, wenn list comprehension mehr Python ist. Hinzugefügt @nbryans Antwort ..

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() 
+0

@Merline Liebe dieses, da ich weiß, ich brauche mehr Comprehensions zu bewegen, aber es gab mir - m ist in bromaster d in kritischen h ist in einem kritischen r in bromaster e ist in bromaster a in bromaster t in bromaster ist e in bromaster ist r in bromaster ist s in bromaster Art von allen ist die Listen wie folgt aussehen - 862a5c99d01a9ba9bd7b92b33d76ec39 aa101c5e81817f8d8cc95490c00b3591 – Dpitt1968

+0

Hey @Merlin - leider sie sehen auch alle genau so aus 882edee4cc71806190ca43993e8b2eb5 oder nekspzwjxhqroiu.com. Entweder MD5 oder URLs. – Dpitt1968

+0

Ah, es ist eine Datei mit einer Liste von MD5's, die ich nicht direkt anrufe. Ich dachte nicht, dass das einen Unterschied macht, es scheint nicht so zu sein, aber ich bin mir nicht sicher. – Dpitt1968

1

Wenn ich die Frage richtig verstanden, Sie wollen

for md5 in z: 
    if md5 in y: 
     print md5+" is in bromaster" 
     pass 

Wie es jetzt geschrieben, du sagst es „in bromaster ist“, nachdem Sie überprüfen, ob if md5 not in y, wo y Master ist.

0

Ich würde vorschlagen, den Code zu bereinigen, um nicht verloren in den vielen Ebenen von Informationen, die Sie miteinander vergleichen möchten. Eine Möglichkeit ist, nicht zu nennen den Inhalt von etwa criticallist in x (wenn sie als Liste abgerufen) eine Sekunde lang warten ...

Was dazu:

#! /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') 

Und dann als @nbryans bereits gesichtet Änderung:

  for a_md5 in z_md5t: 
       if a_md5 not in y_mast: 
        print(a_md5 + " is in bromaster") 
        pass 

zu:

  for a_md5 in z_md5t: 
       if a_md5 in y_mast: 
        print(a_md5 + " is in bromaster") 
        pass 

würde ich @merlins Antwort bevorzugen. Wenn Sie die Kontextmanager weiter verwenden und gleichzeitig vollständige Listen erstellen möchten, warum laden Sie dann nicht zuerst Dateien aus, lassen die Blöcke nacheinander und führen dann die analytischen Matching-Schleifen durch - um eine serielle Sammlungsphase und eine konzentrierte Kombination algortihm mit nur den Listen.

+1

Schau dir meinen Refactor an. – Merlin

+0

Danke @Merlin Ich habe es zuerst nicht verstanden, aber es ist besser, einen korrekten Code zu geben, anstelle meines Displays den umgeleiteten falschen Code und dann ein Ersatzrezept. Ich fordere oft, dass sich Leute von mir nicht einfach kopieren lassen und Code in Fragen einfügen, dann mache ich es selbst. Nochmals vielen Dank ;-) – Dilettant

0

Also der Code sagt, wenn MD5 NICHT in y, so traf es dies, wenn nicht aber die sonst anhängen.

Aktuelle Code:

 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) 

Ich denke, der Code sollte sagen:

 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) 
0

Dank @Merlin für Sie seine sehr geschätzt helfen, und ich bin es mit Verständnis Nacharbeiten. Ich habe dir Punkte gegeben, wo ich nur dafür hätte!

Wenn Sie schauen, wo ich meinen Fehler machte ich die Liste y war die Überprüfung und dann in der Schleife am Ende, um es anhängen, so dass es wie eine nicht enden wollende Schleife war -

I ersetzt -

  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) 

mit -

  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) 

ich schätze es Jungs, die ich irgendwann bin ich hier hoffen auf Rookie helfen!