Python

发布于 更新于

AI总结: CIDR 表示法 CIDR(Classless Inter-Domain Routing,无类域间路由)是一种简化的 IP 地址分配和路由选择协议,它使用了一种叫做 CIDR 表示法的方法来表示 IP...

CIDR 表示法

CIDR(Classless Inter-Domain Routing,无类域间路由)是一种简化的 IP 地址分配和路由选择协议,它使用了一种叫做 CIDR 表示法的方法来表示 IP 地址范围。

CIDR 表示法使用 IP 地址和前缀长度的组合来表示一个 IP 地址段,其中前缀长度指的是 IP 地址中网络部分的长度。

如,192.168.0.0/30 表示了一个包含 4 个 IP 地址的地址段,其中前 30 位是网络地址,后 2 位是主机地址。

配置 ip 地址段
192.168.0.0/30 192.168.0.0-192.168.0.3
192.168.0.0/24 192.168.0.0-192.168.0.255
192.168.0.0/16 192.168.0.0-192.168.255.255
192.168.0.0/8 192.168.0.0-253.255.255.255
172.16.0.0/12 172.16.0.0-172.31.255.255
10.0.0.0/8 10.0.0.0-10.255.255.255
188.180.0.0/22 188.180.0.0-188.180.3.255

转换脚本

# python 3.12.7
import ipaddress

def cidr_to_ip_range(cidr):
    try:
        network = ipaddress.ip_network(cidr, strict=False)
        return {
            "network": str(network.network_address),
            "broadcast": str(network.broadcast_address),
            "netmask": str(network.netmask),
            "cidr": network.prefixlen,
            "total_ips": network.num_addresses,
            "start_ip": str(network.network_address),
            "end_ip": str(network.broadcast_address)
        }
    except ValueError as e:
        return f"错误:{str(e)}"

if __name__ == "__main__":
    cidr_input = input("请输入CIDR格式(例如 192.168.1.0/24 或 2001:db8::/32): ")
    result = cidr_to_ip_range(cidr_input)

    if isinstance(result, dict):
        print("\nCIDR解析结果:")
        print(f"网络地址: {result['network']}")
        print(f"广播地址: {result['broadcast']}")
        print(f"子网掩码: {result['netmask']}")
        print(f"IP总数: {result['total_ips']:,}")
        print(f"IP范围: {result['start_ip']}-{result['end_ip']}")
    else:
        print(result)

相关链接

CIDR 维基