#!/usr/bin/env python2
"""
    Give a summary of the number of failures from various ip addresses

    Copyright  Afrihost.com (PTY) Ltd 2005
    Original file by: Ed Pascoe <ed@pascoe.co.za>
"""
__author__  = "Ed Pascoe <ed@pascoe.co.za>"
__credits__ = "Afrihost.com -- The best webhosting. Ever."


import os.path, sys
import re
if __name__=='__main__': sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0]))+'/../pylib')


reline=re.compile("^\d\d\d\d-.*\s\[(.*?)\]")
renet=re.compile("^(\d+)\.(\d+)\.(\d+)\.(\d+)$")

ipcount={}
for line in open("/var/log/exim_rejectlog"):
    s=reline.search(line)
    if s:
        ip=s.group(1)
        if ipcount.has_key(ip):
            ipcount[ip]=ipcount[ip]+1
        else:
            ipcount[ip]=1

ipnet={}
for k in ipcount.keys():
    s=renet.search(k)
    if not s: continue
    a,b,c,d=s.group(1),s.group(2),s.group(3),s.group(4)
    net="%s.%s" % (a,b)
    if ipnet.has_key(net):
        ipnet[net]=ipnet[net]+ipcount[k]
    else:
        ipnet[net]=ipcount[k]
    
print "-------------------------------------------------------------------------"
print "                                    IP Address list"
print "-------------------------------------------------------------------------"
iplist=ipcount.keys()
iplist.sort(lambda a,b: cmp(ipcount[a],ipcount[b]))
for k in iplist:
    print k,ipcount[k]

print "-------------------------------------------------------------------------"
print "                                      Bad /24 list"
print "-------------------------------------------------------------------------"
iplist=ipnet.keys()
iplist.sort(lambda a,b: cmp(ipnet[a],ipnet[b]))
for k in iplist:
    print k,ipnet[k]



#2005-03-17 10:10:50 H=(urchin.mweb.co.za) [196.2.24.26]:56176
#2005-03-17 09:47:24 H=(196.14.216.35) [222.109.131.135]:3071 I=[19
    
