parent
fe5a2b5444
commit
606f2a4402
|
|
@ -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()
|
||||||
Loading…
Reference in New Issue