python中ipaddress库用法详解

        ipaddress库提供了处理IPv4与IPv6网络地址的类。这些类支持验证,查找网络上的地址和主机,以及其他常见的操作。

示例代码1:

import ipaddress

x = ipaddress.ip_address("192.168.1.1")
print(x)

y = ipaddress.ip_network("192.168.1.1")
print(y)

运行结果:

示例代码2:

import ipaddress

n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
print(net)
for ip in zip(net):
    print(ip)

运行结果:

示例代码3:

import ipaddress

n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
print(net)
ip = ipaddress.ip_address('192.168.1.255')
if ip in net:
    print("True")

运行结果:

地址

示例代码:

import ipaddress
import binascii

addresses = [
    '12.33.3.51',
    '192.168.1.1',
    '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b'
]

for ip in addresses:
    address = ipaddress.ip_address(ip)
    print("IP地址:", address)
    print("IP Version:", address.version)
    print(address, "是否是专用地址:", address.is_private)
    print(address, "是否是公网地址:", address.is_global)
    print(address, "是否是多播地址:", address.is_multicast)
    print(address, "是否是环回地址:", address.is_loopback)
    print(address, "是否是link-local保留:", address.is_link_local)
    print(address, "判断地址是否未指定:", address.is_unspecified)
    print(address, "IP地址16进制:", binascii.hexlify(address.packed))

运行结果:

网络

示例代码:

import ipaddress

addresses = [
    '192.168.1.0/24',
    '2001:0db8:3c4d:0015::/64'
]

for n in addresses:
    net = ipaddress.ip_network(n)
    print(net, "是否是专用地址:", net.is_private)
    print(net, "该网段的广播地址:", net.broadcast_address)
    print(net, "IP地址与子网掩码:", net.compressed)
    print(net, "掩码以二进制的格式展示:", net.with_netmask)
    print(net, "以主机掩码格式展示:", net.with_hostmask)
    print(net, "网络中的地址总数:", net.num_addresses)
    print()

运行结果:

接口

示例代码:

import ipaddress

addresses = [
    '192.168.1.251/24',
    '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b/64'
]

for ip in addresses:
    iface = ipaddress.ip_interface(ip)
    print(iface)
    print("网络地址:", iface.network)
    print("ip地址:", iface.ip)
    print("字符串表示形式:", iface.with_prefixlen)
    print("二进制表示掩码:", iface.with_netmask)
    print("主机掩码表示:", iface.with_hostmask)
    print()

运行结果:

应用案例

1. 检查ip的有效性:

示例代码:

import ipaddress


# 检查ip的有效性
def check_valid_ip(ip):
    try:
        ipaddress.ip_address(ip.strip())
        return True
    except Exception as e:
        print(e)
        return False


if __name__ == '__main__':
    ips = ['192.168.1.1', '192.168.1.366', '10.25.1.36']
    for ip in ips:
        res = check_valid_ip(ip)
        if res:
            print(ip, res)
        else:
            print(ip, res)

运行结果:

2.判断IP是内网还是外网

示例代码:

import ipaddress


# 判断ip是内网还是外网
def check_ip_is_internet(ip):
    try:
        return ipaddress.ip_address(ip.strip()).is_private
    except Exception as e:
        print(e)
        return False


if __name__ == '__main__':
    ips = ['192.168.1.1', '192.168.1.366', '10.25.1.36']
    for ip in ips:
        res = check_ip_is_internet(ip)
        if res:
            print(ip, res)
        else:
            print(ip, res)

运行结果:

参考博文:

python3 判断ip有效性 是否是内网ip_whatday的博客-CSDN博客_python 判断内网ip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值