ban-pcdn-ip/main_2.py

50 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()