I wrote the following python script to do just that.
#!/usr/bin/env python3 #takes in a file of one-per-line IPs and consolidates them into ranges #@atucom import ipaddress import argparse import sys result = [] def consolidate(ipobj): result.append(ipobj) for ipstr in iparry: ipobj2 = ipaddress.ip_address(ipstr) if ipobj + 1 == ipobj2: result.append(ipobj2) iparry.remove(ipstr) consolidate(ipobj2) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("FILE" ,help='The input file of one-per-line IPs to consolidate') args = parser.parse_args() if args.FILE: with open(args.FILE, 'r') as f: iparry = f.read().splitlines() for ipstr in iparry: consolidate(ipaddress.ip_address(ipstr)) if ipaddress.ip_address(ipstr) == result[-1]: print(result[-1]) else: print("%s - %s" % (ipaddress.ip_address(ipstr), result[-1])) else: exit(1)
It takes in a list of unique one-per-line IPs and outputs "-" notation of ranges
That "ips2.txt" file simply contains the following:
192.168.1.0
192.168.1.1
192.168.1.11
192.168.1.13
192.168.1.14
192.168.1.15
192.168.1.16
192.168.1.17
192.168.1.19
192.168.1.2
192.168.1.21
192.168.1.23
192.168.1.24
192.168.1.25
192.168.1.26
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.7
192.168.1.9