目录

  • 前言
  • 地址
  • 网络
    • 打印网络地址有多少IP可用
  • 接口

前言

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

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

地址

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

import ipaddress
import binasciiaddresses = ['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 ipaddressaddresses = ['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 ipaddressn = '192.168.1.0/24'
net = ipaddress.ip_network(n)
for ip in zip(net):print(ip)

运行之后,效果如下:

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

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

import ipaddressn = '192.168.1.0/24'
net = ipaddress.ip_network(n)
ip=ipaddress.ip_address('192.168.1.233')
if ip in net:print("在里面")

接口

网络接口表示网络上的一个特定地址,可以表示为一个主机地址和一个网络前缀或网络掩码。示例如下:

import ipaddressaddresses = ['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)

运行之后,效果如下:

ipaddress库:Python中网络地址的处理相关推荐

  1. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  2. python re库,Python中的Re库简要总结

    一.正则表达式 正则表达式(regular expression)(regex)(RE),用来简洁表达一组字符的表达式,由字符和操作符构成. 通用的字符串表达框架 简洁表达一组字符串的表达式 针对字符 ...

  3. python高级绘图师_matplotlib库-python中的绘图师

    一.初识Matplotlib Matplotlib 是一个 Python 的开源绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.通过 Matplotlib,开发者可以仅需要几行代 ...

  4. python机器学习:搭建tensorflow环境,下载Keras库并在python中成功完成导入。pycharm的相关配置。

    安装过程较长,请大家耐心阅读,其中有一些自己在安装过程中出现过的一些问题,在此一同分享给大家 一.下载Anaconda: 1.首先下载安装Anaconda,可以去官网下载 https://www.an ...

  5. python中常用的序列化模块_Python中的序列化和反序列化

    为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...

  6. 在python中操作excel

    一.可使用的第三方库 python中处理excel表格,常用的库有xlrd(读excel)表.xlwt(写excel)表.openpyxl(可读写excel表)等.xlrd读数据较大的excel表时效 ...

  7. Dymola使用C语言间接调用含第三方库Python文件流程

    Dymola函数中调用python 一.语言配置介绍 Dymola:Dymola 2022 trail version C/C++与python见上一篇:调用python文件(含第三方库)时的C/C+ ...

  8. python中ipaddress库用法详解

    ipaddress库提供了处理IPv4与IPv6网络地址的类.这些类支持验证,查找网络上的地址和主机,以及其他常见的操作. 示例代码1: import ipaddressx = ipaddress.i ...

  9. Python中lxml库的安装(Windows平台)

    之前写过<Python中requests包的安装>,今天我需要安装lxml库,这里我尝试之前安装requests方式,但是没有成功,几经周折,终于总结出来了一个方法,这里拿出来给大家分享. ...

最新文章

  1. SP1043 GSS1 - Can you answer these queries I(线段树,区间最大子段和(静态))
  2. QT的QUdpSocket类的使用
  3. Yii::$app的作用
  4. 想做开源软件开发谁能带一下呀
  5. KYLO的数据库知识总结
  6. cp正在写入文件导致文件内容不一致
  7. 在边缘试探的滴滴顺风车 凭什么在2019年再上线?
  8. 吴军,阅读与写作,11,写景:如何寓情于景?
  9. android mvp mvvm ppt,Android中MVC MVP MVVM模式
  10. 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
  11. 阿玛机器人_豪华日本声优阵容,《战斗天赋解析系统》让你耳朵怀孕!
  12. [旋转卡壳]最大土地面积 AcWing2617
  13. 2022年武汉市工业产品绿色设计示范企业申报条件流程
  14. 基于手机APP的PLC远程监控系统
  15. java全栈系列之JavaSE--数组的定义和创建023
  16. 必备的 DevOps 工具链大盘点
  17. LODOP设置纸张无效问题
  18. Mol文件和SDF文件介绍
  19. python数据分析(四)——numpy中的nan和数据的填充
  20. python车牌识别系统抬杆_【小区停车场车牌识别系统 车辆进门道闸自动抬杆】 - 太平洋安防网...

热门文章

  1. unity3d求一个向量的垂直方向
  2. 文本编码格式转换及文本内容类型的介绍
  3. 【b站求职笔记】行路院-王贺 2020年12月笔记
  4. JAVA计算机毕业设计二手手机回收平台系统Mybatis+源码+数据库+lw文档+系统+调试部署
  5. 好工具推荐系列:看图软件irfanview/Honeyview/pineapple-pictures
  6. 联想计算机M.2固态银盘,联想天逸510s 08IKL更换M.2 PCIE 固态硬盘后装系统,亲测有效...
  7. 汇编语言实现七段数码管显示控制实验
  8. 凿 壁 偷 光 是白话文的,不要文言文的
  9. Day663.大佬学习经验分享 -Java业务开发常见错误
  10. SOD算法:PoolNet