diff --git a/ipdb.txt b/ipdb.txt index 2e61ba0..e7af7e0 100644 --- a/ipdb.txt +++ b/ipdb.txt @@ -1,46 +1,9 @@ -# IP段清单 -104.247.192.0/24 -107.149.204.0/24 -107.165.206.0/24 -111.121.27.0/24 -113.231.202.0/24 -116.179.152.0/24 -118.81.184.0/23 -118.81.185.0/24 -122.195.22.0/24 -124.132.156.0/24 -124.163.207.0/24 -124.163.208.0/24 -124.163.220.0/24 -153.101.51.0/24 -153.101.64.0/24 -153.101.65.0/24 -173.245.76.0/24 -175.42.154.0/24 -175.42.155.0/24 -175.44.72.0/24 -175.44.73.0/24 -183.185.14.0/24 -183.224.221.0/24 -211.90.146.0/24 -211.90.147.0/24 -211.93.170.0/24 -220.248.203.0/24 -221.204.0.0/15 -221.205.0.0/15 -221.205.168.0/23 -221.205.169.0/24 -221.6.171.0/24 -221.7.251.0/24 -221.90.0.0/15 -222.189.163.0/24 27.221.70.0/24 +36.5.81.0/24 +36.35.38.0/24 36.151.55.0/24 36.249.150.0/24 -36.35.38.0/24 -36.5.81.0/24 39.74.239.0/24 -47.76.99.0/24 58.220.40.0/24 60.190.128.0/24 60.220.182.0/24 @@ -51,4 +14,24 @@ 61.160.233.0/24 61.179.15.0/24 61.241.177.0/24 -84.247.148.0/24 \ No newline at end of file +111.121.27.0/24 +113.231.202.0/24 +116.179.152.0/24 +118.81.184.0/23 +122.195.22.0/24 +124.132.156.0/24 +124.163.207.0/23 +124.163.220.0/24 +153.101.51.0/24 +153.101.64.0/23 +153.101.141.0/24 +175.42.154.0/23 +175.44.72.0/23 +183.185.14.0/24 +183.224.221.0/24 +211.90.146.0/23 +211.93.170.0/24 +220.248.203.0/24 +221.6.171.0/24 +221.7.251.0/24 +222.189.163.0/24 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()