···88 """Generator over all allowed IPs given a blacklist."""
99 i = 0
10101111- while i <= max_ip:
1212- if not blacklist:
1313- for n in range(i, max_ip + 1):
1414- yield n
1515-1616- return
1717-1818- start, end = blacklist.pop(0)
1919-1111+ for start, end in sorted(blacklist):
2012 if i < start:
2113 for n in range(i, start):
2214 yield n
···2416 if i <= end:
2517 i = end + 1
26181919+ if i <= max_ip:
2020+ for n in range(i, max_ip + 1):
2121+ yield n
2222+27232824if __name__ == '__main__':
2925 blacklist = []
···3127 for line in fileinput.input():
3228 start, end = parse_line(r'(\d+)-(\d+)', line)
3329 blacklist.append((start, end))
3434-3535- blacklist.sort()
36303731 whitelist = list(allowed_ips(blacklist))
3832