2014-03-27 94 views
2

我正在尝试写一篇关于具有公共接入点名称的危险的博客文章。比较两个文本文件并计算出现次数

因此,我做了一些wardriving获取访问点名称列表,并且我从Renderlab下载了1000个最常见的访问点名称(其中存在彩虹表)的列表。

但是我怎样才能比较这两个文本文件,看看有多少我收集的访问点名称可能受到彩虹表的攻击?

的文本文件建立这样的:

collected.txt:

linksys 
internet 
hotspot 

最常见的接入点名称叫 SSID.txt:

default 
NETGEAR 
Wireless 
WLAN 
Belkin54g 

所以脚本应对行进行排序,比较它们并显示来自collect.txt的行在SSID.txt中找到了多少次。

这是否有意义?任何帮助将不胜感激:)

+0

[使用awk在文件A中选择行,基于查找文件B中的匹配项]的可能重复(http://stackoverflow.com/questions/10584531/using-awk-to-select-lines-in-file -a-based-on-finding-matches-in-file-b) – BMW

回答

2

如果你不介意使用python脚本:

file1=open('collected.txt', 'r')   # open file 1 for reading 
with open('SSID.txt', 'r') as content_file: # ready file 2 
    SSID = content_file.read() 

found={}         # summary of found names 
for line in file1: 
    if line in SSID: 
     if line not in found: 
      found[line]=1 
     else: 
      found[line]+=1 
for i in found: 
    print found[i], i      # print out list and no. of occurencies 

...它可以包含这些文件的目录下运行 - collected.txt和SSID.txt - 它会返回一个看起来像列表此:

5 NETGEAR 
3 default 
(...) 

脚本行由行读取文件1,并比较其整个文件2。可以很容易地修改,以从命令提示接受文件名。

+0

我不介意使用Python。但是我无法运行这个脚本。它与collect.txt和SSID.txt在相同的目录中,但是当我使用“python compare.py”执行它时,没有任何反应。 我运行Python 2.7.5+。任何想法可能是错误的? :) – user2956248

+0

没关系,它现在的作品!非常感谢:) – user2956248

+0

不客气。很高兴帮助 - 也感谢我的第一个接受的答案:) – Taku

0

要查找文件中的每一行出现在文件B的次数,你可以这样做:

awk 'FNR==NR{a[$0]=1; next} $0 in a { count[$0]++ } 
    END { for(i in a) print i, count[i] }' A B 

如果你想输出排序,管道输出到sort,但没有必要进行排序只是为了找到计数。请注意,$0 in a子句可以省去以消耗更多内存为代价,如果文件B非常大,这可能是一个问题。

相关问题