子网范围划分算法

2024-06-14 08:19:29 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个有趣的算法,即划分子网的范围。在

我有一个子网,比如192.168.1.0/24或192.168.1.248/22,等等。我们知道,'/24'或'/22'代表网络,'(32-24)'或'(32-22)'代表网络主人。所以使用192.168.1.0/24,我想将子网分成两个范围,第一个是192.168.1.1-192.168.1.127,第二个是192.168.1.128-192.168.1.254。在

所以我需要一个算法来解决这个问题,它可以将给定的苹果酒子网划分为两个范围Python输入是cidr子网,输出是两个ip这里是范围是一个例子:

Input : 192.168.1.0/24
Output: [{'start_address':'192.168.0.1','end_address':'192.168.0.127'},    
{'start_address':'192.168.0.128','end_address':'192.168.0.245'}]

如果你有一个很好的算法,请在这里展示。在


Tags: ip网络算法inputoutputaddress代表start
1条回答
网友
1楼 · 发布于 2024-06-14 08:19:29

你想要一个算法,还是想要一个解决方案?在

{a1,在Python模块中使用。在PyPI中有一个Python2的后端口。在

如果需要算法,可以读取模块的代码。在

使用ipaddress模块:

import ipaddress
network = ipaddress.ip_network('192.168.1.0/24')
hosts = list(network.hosts())
subnets = [{'start_address': str(list(subnet.hosts())[0]),
            'end_address': str(list(subnet.hosts())[-1])}
                   for subnet in network.subnets()]
print(subnets)

输出

^{pr2}$

很接近你想要的。缺少192.168.1.127(第一个子网的广播地址)、192.168.1.128(第二个子网的网络地址)和192.168.1.255(第二个子网的广播地址)。在

要获得精确的输出,可以拆分主机列表:

hosts = list(network.hosts())
subnets = [{'start_address': str(subnet[0]), 'end_address': str(subnet[-1])} 
               for subnet in (hosts[:len(hosts)//2], hosts[len(hosts)//2:])]
print(subnets)

输出

[{'start_address': '192.168.1.1', 'end_address': '192.168.1.127'}, {'start_address': '192.168.1.128', 'end_address': '192.168.1.254'}]

相关问题 更多 >