2013-03-12 65 views
3

我已經解析了兩個日誌,以便只需將CVE編號寫入文本文件,以便它們顯示爲一個列表。這裏是輸出的一部分;使用python匹配條目

NeXpose Results: CVE-2007-6519 
NeXpose Results: CVE-1999-0559 
NeXpose Results: CVE-1999-1382 
Snort results: CVE-1999-0016 
Snort results: CVE-1999-0016 
Snort results: CVE-1999-0016 
Snort results: CVE-1999-0016 
Snort results: CVE-1999-0016 

它就像這樣一直通過該文件。現在我想讓我的代碼通過CVE編號進行編碼,並查看是否有任何NeXpose CVE匹配snort CVE,因爲我正在關注這兩個CVE。這是我的代碼;

#!/usr/bin/env python 
nexpose = {} 
snort = {} 

CVE = open("CVE.txt","r") 
cveWarning = open("Warning","w") 

for line in CVE.readlines(): 
     list_of_line = line.split(' ') 

    if "NeXpose" in list_of_line[0]: 
     nexResults = list_of_line[2] 
     #print 'NeXpose: ', nexResults 



    if "Snort" in list_of_line[0]: 
     cveResults = list_of_line[2] 
     #print 'Snort: ', cveResults 


a_match = [True for match in nexResults if match in cveResults] 
print a_match 

如果有更好的方法做到這一點,請讓我知道,因爲我認爲我可能過於複雜的事情。

+0

您是否在尋找同時出現'NeXpose'和'Snort'的CVE? – 2013-03-12 10:36:31

+0

nexpose cve從NeXpose掃描報告中提取,snort cve從snort掃描日誌中提取。我想使用CVE編號將任何攻擊嗅探與nexpose漏洞關聯起來。 – user2099445 2013-03-12 10:40:35

+0

因此,將你的問題翻譯成專業術語:你有兩個CVE集合,你想知道哪個CVE出現在兩個集合中? – 2013-03-12 10:46:04

回答

4

您是否考慮過Python集?

#!/usr/bin/python 

lines = open('CVE.txt').readlines() 
nexpose = set([l.split(':')[1].strip() for l in lines if l.startswith('NeXpose')]) 
snort = set([l.split(':')[1].strip() for l in lines if l.startswith('Snort')]) 

# print 'Nexpose: ', ', '.join(nexpose) 
# print 'Snort : ', ', '.join(snort) 

print 'CVEs both in Nexpose and Snort : ', ', '.join(snort.intersection(nexpose)) 
+0

你絕對的傳奇兄弟。爲此歡呼,真的很感激它。 – user2099445 2013-03-12 10:47:46

+0

樂意協助。如果您打算繼續使用Python開發,您可能會發現列表理解是一個有用且有趣的概念:http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions – 2013-03-12 10:53:15

0

我建議使用python集合。

nex = set() 
sno = set() 
for line in CVE.readlines(): 
    list_of_line = line.split(' ') 

    if(list_of_line[0]=="NeXpose"): 
     nex.add(list_of_line[2]) 
    if(list_of_line[0]=="Snort"): 
     sno.add(list_of_line[2]) 

inboth = sno.intersection(nex)