gpt4 book ai didi

Python:从 IP 地址列表生成 IP 范围

转载 作者:太空狗 更新时间:2023-10-30 01:05:11 24 4
gpt4 key购买 nike

我有一个 .csv 文件,其中包含几个数据中心的 IP 地址列表。该列表目前看起来类似于下表:

  Data_Center_Name      IP
DC_1 52.102.182.2
DC_1 52.102.182.4
DC_1 52.102.182.1
DC_1 52.102.182.5
DC_1 52.102.182.3
DC_1 27.101.178.17
DC_1 27.101.178.16
DC_1 27.101.178.15
DC_1 23.201.165.7
DC_2 55.200.162.10
DC_2 55.200.162.12
DC_2 55.200.162.13
DC_2 55.200.162.11
DC_3 30.101.102.4

我想将列表转换为单独的列表,例如:

     DC_1 = [52.102.182.1-52.102.182.5,
27.101.178.15-27.101.178.17,
23.201.165.7]
DC_2 = [55.200.162.10-55.200.162.13]
DC_3 = [30.101.102.4]

有人可以帮我使用 python 吗?

最佳答案

我的解决方案是:

  1. 将每个IP转换为十进制数

  2. 排序并从列表数字中获取范围(间隔)

  3. 将它们转换为 IP 格式。

输入:

ips = [ "52.102.182.2", "52.102.182.4", "52.102.182.1", "52.102.182.5", "52.102.182.3", 
"27.101.178.17", "27.101.178.16", "27.101.178.15",
"23.201.165.7", ]

第 1 步:

IP => 二进制 => 十进制

# Convert ips to binary strings
bins = [''.join([bin(int(i))[2:].zfill(8) for i in ip.split('.')]) for ip in ips]

# Convert binary strings to decimal numbers
numbers = [int(b, 2) for b in bins]

或 IP => 十进制

# Convert ips to decimal numbers
numbers = [sum((256 ** (3 - k)) * int(n) for k, n in enumerate(ip.split('.'))) for ip in ips]

第 2 步:

# Sort decimal numbers
numbers.sort()

# Get ranges from decimal numbers
ranges = []
tmp = []
for i in range(len(numbers)):
tmp.append(numbers[i])
if (i == len(numbers) - 1) or (numbers[i + 1] > numbers[i] + 1):
if len(tmp) == 1:
ranges.append(tmp[0])
else:
ranges.append((tmp[0], tmp[-1]))
tmp = []

第 3 步:

# Convert dec ranges to ip ranges
def dec_to_ip(n):
return '.'.join([str(int(n % 256 ** (4 - k) / 256 ** (3 - k))) for k in range(4)])

# Final result
ip_ranges = [(dec_to_ip(r[0]), dec_to_ip(r[1])) if type(r) == tuple else dec_to_ip(r) for r in ranges]

输出:

['23.201.165.7', ('27.101.178.15', '27.101.178.17'), ('52.102.182.1', '52.102.182.5')]

关于Python:从 IP 地址列表生成 IP 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com