Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import sys
- import re
- import os.path
- USAGE = """\
- USAGE: {} [[-s] SOURCE_IP | -d DEST_IP | SOURCE_IP DEST_IP] FILENAME
- Display counts for each unique source-destination-protocol triplet.""".format(sys.argv[0])
- """Basically, this script takes a csv-like file, and gives a count of how many adjacent (e.g. line 44 and line 45) duplicate lines it finds.
- Additionally, it will ignore any lines that do not include sys.argv[2] in their 3rd field (i.e. line[2])."""
- IP_PATTERN = re.compile(r'^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.'
- +r'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.'
- +r'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.'
- +r'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$')
- def check_ips(*ips):
- for ip in ips:
- if IP_PATTERN.match(ip) is None:
- print ip + ' is not a valid IPv4 address'
- sys.exit()
- filename = os.path.abspath(sys.argv[-1])
- if not is.path.exists(filename):
- print USAGE
- sys.exit()
- elif os.path.exists(filename) and not os.path.isfile(filename):
- print arg1 + ' is not a file'
- sys.exit()
- with open(filename) as f:
- lines = [','.join(line.strip().replace('"', '').split(',')[2:5]) for line in f]
- if len(sys.argv) == 3:
- check_ips(sys.argv[1]
- lines = [line for line in lines if sys.argv[1] in line.split(',')[0]]
- elif len(sys.argv) == 4 and sys.argv[2] == '-s':
- check_ips(sys.argv[2])
- lines = [line for line in lines if sys.argv[2] in line.split(',')[0]]
- elif len(sys.argv) == 4 and sys.argv[2] == '-d':
- check_ips(sys.argv[2])
- lines = [line for line in lines if sys.argv[2] in line.split(',')[1]]
- elif len(sys.argv) == 4:
- check_ips(sys.argv[1], sys.argv[2])
- lines = [line for line in lines if sys.argv[1] in line.split(',')[0] and sys.argv[2] in line.split(',')[1]]
- else:
- print USAGE
- sys.exit()
- counts = {}
- for line in lines:
- if line in counts:
- counts[line] += 1
- else:
- counts[line] = 1
- print ' Source IP Destination IP Protocol Count'
- last = ['', '', '']
- for line in sorted(counts.keys()):
- line = line.split(',')
- if [last[0], last[1]] == line[0:2]:
- print (' '*37 + '{:>9} {:>15}'
- .format(line[2], counts[','.join(line)]))
- elif last[0] == line[0]:
- print (' '*20 + '{:<16} {:>9} {:>15}'
- .format(line[1], line[2], counts[','.join(line)]))
- else:
- print ('{:<16} {:<16} {:>9} {count:>15}'
- .format(*line, count = counts[','.join(line)]))
- last = line
- print 'Total: %20s' % sum(counts.values())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement