Advertisement
KevinOrr

Untitled

Oct 13th, 2014
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.63 KB | None | 0 0
  1. #!/usr/bin/python
  2. import sys
  3. import re
  4. import os.path
  5.  
  6. USAGE = """\
  7. USAGE: {} [[-s] SOURCE_IP | -d DEST_IP | SOURCE_IP DEST_IP] FILENAME
  8. Display counts for each unique source-destination-protocol triplet.""".format(sys.argv[0])
  9.  
  10.  
  11. """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.
  12. Additionally, it will ignore any lines that do not include sys.argv[2] in their 3rd field (i.e. line[2])."""
  13.  
  14. IP_PATTERN = re.compile(r'^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.'
  15.                        +r'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.'
  16.                        +r'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.'
  17.                        +r'(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$')
  18.  
  19. def check_ips(*ips):
  20.    for ip in ips:
  21.         if IP_PATTERN.match(ip) is None:
  22.             print ip + ' is not a valid IPv4 address'
  23.             sys.exit()
  24.  
  25.  
  26. filename = os.path.abspath(sys.argv[-1])
  27. if not is.path.exists(filename):
  28.     print USAGE
  29.     sys.exit()
  30. elif os.path.exists(filename) and not os.path.isfile(filename):
  31.     print arg1 + ' is not a file'
  32.     sys.exit()
  33.  
  34. with open(filename) as f:
  35.     lines = [','.join(line.strip().replace('"', '').split(',')[2:5]) for line in f]
  36.  
  37. if len(sys.argv) == 3:
  38.     check_ips(sys.argv[1]
  39.     lines = [line for line in lines if sys.argv[1] in line.split(',')[0]]
  40. elif len(sys.argv) == 4 and sys.argv[2] == '-s':
  41.     check_ips(sys.argv[2])
  42.     lines = [line for line in lines if sys.argv[2] in line.split(',')[0]]
  43. elif len(sys.argv) == 4 and sys.argv[2] == '-d':
  44.     check_ips(sys.argv[2])
  45.     lines = [line for line in lines if sys.argv[2] in line.split(',')[1]]
  46. elif len(sys.argv) == 4:
  47.     check_ips(sys.argv[1], sys.argv[2])
  48.     lines = [line for line in lines if sys.argv[1] in line.split(',')[0] and sys.argv[2] in line.split(',')[1]]
  49. else:
  50.     print USAGE
  51.     sys.exit()
  52.  
  53. counts = {}
  54.  
  55. for line in lines:
  56.     if line in counts:
  57.         counts[line] += 1
  58.     else:
  59.         counts[line] = 1
  60.  
  61. print '       Source IP      Destination IP  Protocol           Count'
  62.  
  63. last = ['', '', '']
  64. for line in sorted(counts.keys()):
  65.     line = line.split(',')
  66.     if [last[0], last[1]] == line[0:2]:
  67.         print (' '*37 + '{:>9} {:>15}'
  68.                         .format(line[2], counts[','.join(line)]))
  69.     elif last[0] == line[0]:
  70.         print (' '*20 + '{:<16} {:>9} {:>15}'
  71.                         .format(line[1], line[2], counts[','.join(line)]))
  72.     else:
  73.         print ('{:<16}    {:<16} {:>9} {count:>15}'
  74.                .format(*line, count = counts[','.join(line)]))
  75.     last = line
  76.  
  77. print 'Total:  %20s' % sum(counts.values())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement