获取网络地址信息计算

子网划分

import ipaddress

# 定义IP地址和子网掩码
ip_network = ipaddress.IPv4Network('192.168.0.0/24')

# 划分子网
subnets = list(ip_network.subnets(new_prefix=26))

# 打印子网
for subnet in subnets:
    print(subnet)

划分后可用主机地址

import ipaddress

# 定义IP地址和子网掩码
ip_network = ipaddress.IPv4Network('192.168.0.0/24')

# 划分子网
subnets = list(ip_network.subnets(new_prefix=26))

# 打印每个子网的详细可用地址
for subnet in subnets:
    print(f"子网: {subnet}")
    print("可用地址:")
    for host in subnet.hosts():
        print(host)
    print()

根据地址信息获取网络地址

方式1:

import ipaddress

# 定义IP地址和子网掩码
ip_address = ipaddress.IPv4Address('192.168.0.10')
subnet_mask = ipaddress.IPv4Address('255.255.255.0')

# 获取网络地址
network_address = ipaddress.IPv4Network(f"{ip_address}/{subnet_mask}", strict=False)

# 打印网络地址
print(network_address.network_address)

方式2:

import ipaddress

# 定义IP地址和子网掩码
ip_cidr = '192.168.0.10/24'

# 获取网络地址
network_address = ipaddress.IPv4Network(ip_cidr, strict=False)

# 打印网络地址
print(network_address.network_address)

融合使用:通过IP网段信息测试已经使用的IP地址情况,PING只能作为参考

import ipaddress
import subprocess

# IP地址
ip_cidr = '172.30.1.62/27'

# 取掩码
prefix = ip_cidr.split("/")
# print(prefix[1])

#  获取网络地址
network_address = ipaddress.IPv4Network(ip_cidr, strict=False)
print("网络地址:" + str(network_address.network_address))


# 定义IP地址和子网掩码
ip_network = ipaddress.IPv4Network(network_address)

# 划分子网
subnets = list(ip_network.subnets(new_prefix=int(prefix[1])))

i = 0
x = 0
y = 0


# 打印每个子网的详细可用地址
for subnet in subnets:
    # print("网络地址:" + str(subnet.network_address))
    print("广播地址:" + str(subnet.broadcast_address))
    print(f"子网: {subnet}")
    print("可用地址:")
    for host in subnet.hosts():
        # print("主机地址:" + str(host))
        # linux使用-c,windows使用—n
        # 执行PING
        result = subprocess.run(['ping', '-n', '1', str(host)], capture_output=True, text=True)

        if result.returncode == 0:
            print("主机地址:" + str(host) + " success")
            x = x + 1
        else:
            print("主机地址:" + str(host) + " fail")
            y = y + 1

        i = i + 1
    print("总主机地址数:" + str(i) + " 已经使用:" + str(x) + " 可用:" + str(y))