diff --git a/main_2.py b/main_2.py new file mode 100644 index 0000000..292ec19 --- /dev/null +++ b/main_2.py @@ -0,0 +1,49 @@ +import ipaddress +import sys + +def cidr_to_range(cidr): + network = ipaddress.ip_network(cidr) + return (network.network_address, network.broadcast_address) + +def range_to_cidr(start, end): + return [str(cidr) for cidr in ipaddress.summarize_address_range(start, end)] + +def merge_cidrs(cidrs): + ranges = sorted(cidr_to_range(cidr) for cidr in cidrs) + merged = [] + for start, end in ranges: + if not merged or start > merged[-1][1] + 1: + merged.append([start, end]) + else: + merged[-1][1] = max(merged[-1][1], end) + + result = [] + for start, end in merged: + result.extend(range_to_cidr(start, end)) + return result + +def main(): + print("请输入IP段列表(每行一个CIDR格式的IP段):") + print("输入完成后,请按Ctrl+D (Unix/Linux/Mac) 或 Ctrl+Z 然后按Enter (Windows) 来结束输入") + + input_cidrs = [] + for line in sys.stdin: + cidr = line.strip() + try: + ipaddress.ip_network(cidr) + input_cidrs.append(cidr) + except ValueError: + print(f"无效的CIDR格式: {cidr},已忽略", file=sys.stderr) + + if not input_cidrs: + print("未输入有效的IP段", file=sys.stderr) + return + + merged_cidrs = merge_cidrs(input_cidrs) + + print("\n合并后的IP段:") + for cidr in merged_cidrs: + print(cidr) + +if __name__ == "__main__": + main()