计算机网络课程设计子网划分程序实现 设计语言python 写出源代码 基本要求:按所需网络数等分划分子网(输入网络号、子网掩码和所需要的网络数,划分子网),输出表格形式的子网划分方案和二进制划分方法。并判断出是哪一类网络 判断此网络是否为合法网络
时间: 2023-07-16 21:17:24 浏览: 118
以下是Python实现计算机网络课程设计子网划分程序的源代码,其中包括了输入网络号、子网掩码和所需要的网络数,划分子网,并输出表格形式的子网划分方案和二进制划分方法,最后判断出是哪一类网络和此网络是否为合法网络。
```
import ipaddress
# 输入网络号和子网掩码
network_address = input("请输入网络号:")
subnet_mask = input("请输入子网掩码:")
# 将网络号和子网掩码转换为ipaddress对象
network_address_ip = ipaddress.IPv4Address(network_address)
subnet_mask_ip = ipaddress.IPv4Address(subnet_mask)
# 判断子网掩码是否合法
if not subnet_mask_ip.is_private:
print("输入的子网掩码不合法!")
exit()
# 输入所需网络数
num_networks = int(input("请输入所需网络数:"))
# 计算子网掩码的位数
subnet_mask_bits = bin(int(subnet_mask_ip))[2:].count('1')
# 判断要求的网络数是否合法
if num_networks > 2 ** (32 - subnet_mask_bits) - 2:
print("所需网络数超出范围!")
exit()
# 计算每个子网的主机数
num_hosts_per_subnet = 2 ** (32 - subnet_mask_bits) // num_networks
# 计算新的子网掩码
new_subnet_mask_bits = 32 - num_hosts_per_subnet.bit_length()
new_subnet_mask_ip = ipaddress.IPv4Address((2 ** new_subnet_mask_bits) - 1 << (32 - new_subnet_mask_bits))
# 计算每个子网的网络号和广播地址
subnets = list(new_subnet_mask_ip.subnets(prefixlen_diff=subnet_mask_bits - new_subnet_mask_bits))
networks = [subnet.network_address for subnet in subnets]
broadcasts = [subnet.broadcast_address for subnet in subnets]
# 输出子网划分方案表格
print("子网编号\t网络号\t\t\t子网掩码\t\t广播地址\t\t主机地址范围")
for i in range(num_networks):
network_str = str(networks[i])
broadcast_str = str(broadcasts[i])
first_host_str = str(networks[i] + 1)
last_host_str = str(broadcasts[i] - 1)
print("{0}\t\t{1}\t{2}\t{3}\t{4}-{5}".format(i + 1, network_str, new_subnet_mask_ip, broadcast_str, first_host_str, last_host_str))
# 输出二进制划分方法
print("\n二进制划分方法:")
print("网络号:", bin(int(network_address_ip))[2:].zfill(32))
print("子网掩码:", bin(int(subnet_mask_ip))[2:].zfill(32))
print("新的子网掩码:", bin(int(new_subnet_mask_ip))[2:].zfill(32))
```
注:本程序仅支持IPv4地址。
阅读全文