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

编程实现一个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()

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

噗-噗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值