纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Python ipaddress网络地址 Python中实现ipaddress网络地址的处理

一天一篇Python库   2021-06-07 我要评论
想了解Python中实现ipaddress网络地址的处理的相关内容吗一天一篇Python库在本文为您仔细讲解Python ipaddress网络地址 的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python,ip网络地址,Python,IP地址处理,Python,ipaddress网络地址下面大家一起来学习吧

前言

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

本篇将详细介绍Python中ipaddress库的使用规则(内容涉及很多计算机网络知识如果不懂可以参考书籍《计算机网络》)

地址

一般来说我们使用ipaddress库是通过ip_address()函数构建一个地址对象它会返回一个IPv4Address或IPv6Address实例实例如下:

import ipaddress
import binascii

addresses = [
    '121.63.3.59',
    '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.is_private)
    print("是否是公网地址:", address.is_global)
    print("是否是多播地址:", address.is_multicast)
    print("是否是环回地址:", address.is_loopback)
    print("是否是link-local保留:", address.is_link_local)
    print("判断地址是否未指定:", address.is_unspecified)
    print("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.is_private)
    print("该网段的广播地址:", net.broadcast_address)
    print("IP地址与子网掩码:", net.compressed)
    print("掩码以二进制的格式展示:", net.with_netmask)
    print("以主机掩码格式展示:", net.with_hostmask)
    print("网络中的地址总数:", net.num_addresses)
    print()

运行之后效果如下:

效果如图

涉及IP地址与子网掩码以及广播地址等知识读者可以参考《计算机网络》

打印网络地址有多少IP可用

在IPv4的网络地址中我们一般将其分为A,B,C类上面我们提供的192.168.1.0是一个C类地址学过网络的应该一眼就可以看出来其主机地址有254个基地址为192.168.1.0而广播地址为192.168.1.255整体是256个

因为这是C类地址数学稍微好点的肯定手到擒来但是我给你一个IPv6或者IPv4的A类地址能口算出来多少的恐怕很少吧而ipaddress库可以直接遍历打印示例如下:

import ipaddress

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

运行之后效果如下:

效果

这里遍历迭代列出了所有的地址如果只列出可用的主机地址把zip(net)改为zip(net.hosts())即可(也就是去除了广播地址与基地址的其他地址)

当然如果你只是想确定一个地址是否在网络中可以直接使用in进行判断示例如下:

import ipaddress

n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
ip=ipaddress.ip_address('192.168.1.233')
if ip in net:
    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)

运行之后效果如下:

效果号


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式