擅长:python、mysql、java
<p>试试这个解决方案,我用问题中的示例输入进行了测试,效果很好:</p>
<pre><code>import re
from collections import defaultdict
pattern = re.compile(r'(\w{3}\s+\d{1,2}).+Failed password for .+? from (\S+)')
def attack_dict(myfile):
attacks = defaultdict(lambda: defaultdict(int))
for line in myfile:
found = pattern.match(line)
if found:
date, ip = found.groups()
attacks[date][ip] += 1
return attacks
def report(myfile):
for date, ips in attack_dict(myfile).iteritems():
print '{0} has {1} attacks'.format(date, sum(ips.itervalues()))
for ip, n in ips.iteritems():
print '\t{0} has {1} attacks'.format(ip, n)
</code></pre>
<p>这样运行:</p>
^{pr2}$