拓展作业 编程实现一个IP编址计算工具

发布时间:2024年01月10日

编程实现一个IP编址计算工具

目录

编程实现一个IP编址计算工具

一、实验目的和要求

二、实验内容

三、实验设备与环境

四、实验设计方案

五、实验结果

六、实验小结

七、附录源码


声明:由于没说明使用哪种编程语言,我这里用的是Python,本学期正好学的也是Python,读者可自行选择其他Java、C语言等。

主页:噗-噗

一、实验目的和要求

1.学习和掌握IP编址和子网划分的基本原理和方法。
2.掌握使用编程语言实现IP编址计算工具的能力。
3.提高解决实际网络问题的能力,为用户提供便利的IP地址管理工具。
4.程序应具有良好的用户界面,能够根据用户输入进行相应的提示和反馈。
5.程序应能够处理各种可能的输入情况,包括合法的IP地址和不合法的IP地址。
6.程序应能够根据给定的地址块信息,给出子网划分方案,并计算出每个子网的网络地址、子网掩码、可用IP地址范围及广播地址。
7.程序应能够进行错误处理和异常情况处理,确保程序的稳定性和可靠性。

二、实验内容

编程实现一个IP编址计算工具,语言不限,程序功能需包括:

1.能够根据用户输入的网络地址,判断出用户输入地址的合法性;

2.能够根据给定的地址块信息和用户需求,给出子网划分(或地址块)划分方案,并计算出:每个子网(或地址块)的网络地址、子网(地址)掩码、可用IP地址范围及广播地址。

3.程序应有相应的输入提示及良好的输出组织,易于用户使用和查看结果。

三、实验设备与环境

1.Windows11系统

2.Pycharm community 2021

四、实验设计方案

(一)算法描述:

1.IP地址合法性判断:

(1)提取IP地址的四个部分(A, B, C, D)。
(2)检查每个部分是否在0-255之间。
(3)判断四个部分之间是否使用了正确的“.”分隔符
(4)提示用户输入网络地址(采用CIDR表示法)

2.子网划分:

(1)计算子网掩码位数:(subnet_mask_bits = 32 - subnet_size)。
(2)根据掩码位数构建子网掩码字符串。
(3)计算所有子网的网络地址:从主网地址开始,每次增加一个子网掩码位数。
3.地址计算:

(1)对于每个子网:计算子网的起始IP地址(子网地址+1,除非它是主网地址,则从该地址开始)。
(2)计算子网的结束IP地址(子网地址+2^subnet_mask_bits-1,除非它是主网地址,则到该地址结束)。
(3)计算广播地址(结束IP地址)。
4.界面交互:

(1)提供文本框供用户输入网络地址、子网大小和子网数量。
(2)显示每个子网的详细信息,包括网络地址、掩码、可用范围和广播地址。
5.错误处理:

(1)当用户输入非法IP地址时,提示用户重新输入。
(2)当用户输入不合法的子网大小或子网数量时,给出相应的错误提示。

(二)设计思路:
1.用户友好性:

????????设计直观的用户界面,提供明确的输入提示,使工具易于使用。
2.模块化设计:

????????将代码划分为不同的模块,如输入验证、子网划分、地址计算等,方便代码的维护和扩展。
3.异常处理:

????????对用户输入的非法值进行错误处理,如提示用户重新输入。
4.清晰输出:

????????以易于理解的方式显示计算结果,如每个子网的详细信息。

(三)实验步骤:

1. 用户输入网络地址验证:

(1)提示用户输入网络地址(采用CIDR表示法)。
(2)使用ipaddress模块验证用户输入的网络地址是否合法:若合法,继续;若不合法,要求用户重新输入。
2. 用户输入子网大小:

(1)提示用户输入所需子网大小(即子网掩码的位数)。
(2)确保输入的子网大小是有效的数字。
3. 子网划分与计算:

(1)将用户输入的网络地址转换为IP地址对象。
(2)使用给定的子网大小,将该网络地址划分为子网,对每个子网执行以下步骤:
????????a.计算子网的网络地址。
????????b.计算子网的子网掩码。
????????c.计算可用IP地址范围(除去网络地址和广播地址)。
????????d.计算子网的广播地址。
????????e.打印或存储这些信息,以便后续输出。
4.输出结果:

(1)对每个子网,输出网络地址、子网掩码、可用IP地址范围和广播地址等信息。
(2)信息以易于理解的形式展示,并提供相应的用户提示和组织结构。
5. 主程序流程:

(1)主程序循环,直到用户提供有效的网络地址和子网大小。
(2)执行子网划分与计算函数,将用户输入的网络地址和子网大小作为参数传递。
(3)输出结果并展示给用户。

五、实验结果

六、实验小结

心得体会:

????????通过这次实验,我了解了IP编址的原理和计算方法。在实际操作中,我学到了如何根据用户需求进行子网划分,并计算每个子网的相关信息。同时,我也明白了在设计工具时,用户友好性和清晰性是非常重要的。为了提高用户体验,需要提供明确的输入提示和清晰的输出显示。

注意事项:

????????1.在进行IP地址合法性判断时,需要仔细检查每个部分的数值范围和分隔符。

????????2.在进行子网划分时,需要注意子网掩码的位数和计算方法。

????????3.在计算可用IP地址范围和广播地址时,需要确保起始和结束地址的准确性。

七、附录源码

import ipaddress

def validate_ip_address(ip):

??? try:

??????? ipaddress.ip_network(ip)

??????? return True

??? except ValueError:

??????? return False



def subnet_calculation(network_address, subnet_size):

??? try:

??????? network = ipaddress.ip_network(network_address)

??????? subnets = list(network.subnets(new_prefix=subnet_size))

??????? for i, subnet in enumerate(subnets):

??????????? print(f"\n子网 {i + 1} 信息:")

??????????? print(f"网络地址: {subnet.network_address}")

??????????? print(f"子网掩码: {subnet.netmask}")

??????????? print(f"可用IP地址范围: {subnet.network_address + 1} - {subnet.broadcast_address - 1}")

??????????? print(f"广播地址: {subnet.broadcast_address}")

??? except ValueError as e:

??????? print(f"错误: {e}")



def main():

??? print("欢迎使用IP地址编址计算工具")

??? while True:

??????? user_input = input("\n请输入网络地址(CIDR表示法,例如:192.168.1.0/24): ")

??????? if validate_ip_address(user_input):

??????????? break

??????? else:

??????????? print("无效的网络地址,请输入有效的CIDR表示法。")

??? while True:

??????? subnet_size = input("\n请输入子网大小(例如:24 表示 /24 子网): ")

??????? if subnet_size.isdigit():

??????????? break

??????? else:

??????????? print("无效的子网大小,请输入有效的数字。")

??? subnet_calculation(user_input, int(subnet_size))

if __name__ == "__main__":

??? main()

文章来源:https://blog.csdn.net/2301_76294113/article/details/135463031
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。