📜  查找类、广播和网络地址的程序(1)

📅  最后修改于: 2023-12-03 15:40:25.247000             🧑  作者: Mango

查找类、广播和网络地址的程序

本程序的目标是为了帮助程序员查找类、广播和网络地址。下面将对程序的设计和功能进行进一步介绍。

设计

本程序使用Python语言编写,并通过命令行界面提供用户操作。程序共包含以下5个功能:

  1. 查找类的地址
  2. 查找广播地址
  3. 查找网络地址
  4. 查找网络前缀
  5. 查找网络掩码

用户可以通过选择相应的功能来实现对应的操作,程序会根据用户输入的参数返回相应的结果。

功能介绍
查找类的地址

本功能用于查找指定IP地址的地址类别。支持输入单个IP地址或一组IP地址,程序会根据其地址类型进行分类。

def get_ip_class(ip_address):
    """获取IP地址的类别"""
    class_a = range(1, 127)
    class_b = range(128, 192)
    class_c = range(192, 224)
    class_d = range(224, 240)
    class_e = range(240, 256)

    if isinstance(ip_address, str):
        octets = ip_address.split(".")
    else:
        octets = ip_address

    first_octet = int(octets[0])

    if first_octet in class_a:
        return "A"
    elif first_octet in class_b:
        return "B"
    elif first_octet in class_c:
        return "C"
    elif first_octet in class_d:
        return "D"
    elif first_octet in class_e:
        return "E"
    else:
        return "Unknown"


ip_address = "192.168.1.1"
print(f"{ip_address}属于{get_ip_class(ip_address)}类")
查找广播地址

本功能用于查找指定IP地址的广播地址。支持输入单个IP地址或一组IP地址,程序会计算出相应的广播地址。

def get_broadcast_address(ip_address, subnet_mask):
    """获取广播地址"""
    octets = ip_address.split(".")
    subnet_octets = subnet_mask.split(".")
    broadcast_octets = []

    for i in range(4):
        broadcast_octet = int(octets[i]) | ~int(subnet_octets[i]) & 255
        broadcast_octets.append(str(broadcast_octet))

    broadcast_address = ".".join(broadcast_octets)

    return broadcast_address


ip_address = "192.168.1.1"
subnet_mask = "255.255.255.0"
print(f"{ip_address}的广播地址是{get_broadcast_address(ip_address, subnet_mask)}")
查找网络地址

本功能用于查找指定IP地址和子网掩码组成的网络地址。支持输入单个IP地址或一组IP地址,程序会计算出相应的网络地址。

def get_network_address(ip_address, subnet_mask):
    """获取网络地址"""
    octets = ip_address.split(".")
    subnet_octets = subnet_mask.split(".")
    network_octets = []

    for i in range(4):
        network_octet = int(octets[i]) & int(subnet_octets[i])
        network_octets.append(str(network_octet))

    network_address = ".".join(network_octets)

    return network_address


ip_address = "192.168.1.1"
subnet_mask = "255.255.255.0"
print(f"{ip_address}的网络地址是{get_network_address(ip_address, subnet_mask)}")
查找网络前缀

本功能用于查找指定子网掩码的网络前缀。支持输入单个子网掩码或一组子网掩码,程序会计算出相应的网络前缀长度。

def get_prefix_length(subnet_mask):
    """获取网络前缀长度"""
    subnet_octets = subnet_mask.split(".")
    binary_subnet_mask = "".join([bin(int(i))[2:].zfill(8) for i in subnet_octets])
    prefix_length = 0

    for bit in binary_subnet_mask:
        if bit == "1":
            prefix_length += 1
        else:
            break

    return prefix_length


subnet_mask = "255.255.255.0"
print(f"子网掩码{subnet_mask}的网络前缀长度是{get_prefix_length(subnet_mask)}位")
查找网络掩码

本功能用于查找指定网络前缀长度的网络掩码。支持输入单个网络前缀长度或一组网络前缀长度,程序会计算出相应的网络掩码。

def get_subnet_mask(prefix_length):
    """获取网络掩码"""
    binary_subnet_mask = ""

    for i in range(32):
        if i < prefix_length:
            binary_subnet_mask += "1"
        else:
            binary_subnet_mask += "0"

    subnet_octets = []

    for i in range(0, 32, 8):
        subnet_octet = int(binary_subnet_mask[i:i+8], 2)
        subnet_octets.append(str(subnet_octet))

    subnet_mask = ".".join(subnet_octets)

    return subnet_mask


prefix_length = 24
print(f"网络前缀长度为{prefix_length}的网络掩码是{get_subnet_mask(prefix_length)}")
总结

本程序提供了一组常用的网络地址计算功能,可以帮助程序员快速解决常见的网络地址问题。虽然本程序的输入和输出都通过命令行界面实现,但是通过小的改动可以很方便地集成到其他工具或库中。