每周一个 Python 模块 | ipaddress

这些类支持验证,查找网络上的地址和主机以及其他常见操作。迭代网络会产生地址,但并非所有地址都对主机有效。将此示例的输出与前一示例进行比较表明,主机地址不包括在整个网络上进行迭代时生成的第一个值。in使用网络掩码来测试地址,因此它比扩展网络上的完整地址列表更有效。网络接口表示网络上的特定地址,并且可以由主机地址和网络前缀或网络掩码表示。

以下为知识DOC为大家进行整理的相关内容,希望对大家有所帮助!

模块包括用于处理 IPv4 和 IPv6 网络地址的类。这些类支持验证,查找网络上的地址和主机以及其他常见操作。

地址

最基本的对象代表网络地址本身。传递字符串,整数或字节序列给 () 来构造地址。返回值是 或 实例,具体取决于所使用的地址类型。

import binasciiimport ipaddressADDRESSES = [ '10.9.0.6', 'fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa',]for ip in ADDRESSES: addr = ipaddress.ip_address(ip) print('{!r}'.format(addr)) print(' IP version:', addr.version) print(' is private:', addr.is_private) print(' packed form:', binascii.hexlify(addr.packed)) print(' integer:', int(addr)) print() # output# IPv4Address('10.9.0.6')# IP version: 4# is private: True# packed form: b'0a090006'# integer: 168361990# # IPv6Address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa')# IP version: 6# is private: True# packed form: b'fdfd87b5b4755e3eb1bce121a8eb14aa'# integer: 337611086560236126439725644408160982186

还可以用这个方法来校验 IP 地址是否合法:

import ipaddressdef is_ip_Valid(ipaddr): try: ipaddress.ip_address(ipaddr); return True; except : return False; if __name__ == '__main__': print(is_ip_Valid('2001:db8::')); print(is_ip_Valid('192.168.168.1'));

网络

网络是由一系列地址组成的,通常用地址和掩码这种形式来表示。

import ipaddressNETWORKS = [ '10.9.0.0/24', 'fdfd:87b5:b475:5e3e::/64',]for n in NETWORKS: net = ipaddress.ip_network(n) print('{!r}'.format(net)) print(' is private:', net.is_private) print(' broadcast:', net.broadcast_address) print(' compressed:', net.compressed) print(' with netmask:', net.with_netmask) print(' with hostmask:', net.with_hostmask) print(' num addresses:', net.num_addresses) print() # output# IPv4Network('10.9.0.0/24')# is private: True# broadcast: 10.9.0.255# compressed: 10.9.0.0/24# with netmask: 10.9.0.0/255.255.255.0# with hostmask: 10.9.0.0/0.0.0.255# num addresses: 256# # IPv6Network('fdfd:87b5:b475:5e3e::/64')# is private: True# broadcast: fdfd:87b5:b475:5e3e:ffff:ffff:ffff:ffff# compressed: fdfd:87b5:b475:5e3e::/64# with netmask: fdfd:87b5:b475:5e3e::/ffff:ffff:ffff:ffff::# with hostmask: fdfd:87b5:b475:5e3e::/::ffff:ffff:ffff:ffff# num addresses: 18446744073709551616

与地址一样,IPv4 和 IPv6网络有两种网络类。每个类提供用于访问与网络相关联的值的属性或方法,例如广播地址和可供主机使用的网络上的地址。

网络实例是可迭代的,并产生网络上的地址。

import ipaddressNETWORKS = [ '10.9.0.0/24', 'fdfd:87b5:b475:5e3e::/64',]for n in NETWORKS: net = ipaddress.ip_network(n) print('{!r}'.format(net)) for i, ip in zip(range(3), net): print(ip) print() # output# IPv4Network('10.9.0.0/24')# 10.9.0.0# 10.9.0.1# 10.9.0.2# # IPv6Network('fdfd:87b5:b475:5e3e::/64')# fdfd:87b5:b475:5e3e::# fdfd:87b5:b475:5e3e::1# fdfd:87b5:b475:5e3e::2

此示例仅打印一些地址,因为 IPv6 网络可以包含的地址远多于输出中的地址。

迭代网络会产生地址,但并非所有地址都对主机有效。例如,网络的基地址和广播地址。要查找网络上常规主机可以使用的地址python获取ip地址,请使用 hosts() 方法,该方法会生成一个生成器。

import ipaddressNETWORKS = [ '10.9.0.0/24', 'fdfd:87b5:b475:5e3e::/64',]for n in NETWORKS: net = ipaddress.ip_network(n) print('{!r}'.format(net)) for i, ip in zip(range(3), net.hosts()): print(ip) print() # output# IPv4Network('10.9.0.0/24')# 10.9.0.1# 10.9.0.2# 10.9.0.3# # IPv6Network('fdfd:87b5:b475:5e3e::/64')# fdfd:87b5:b475:5e3e::1# fdfd:87b5:b475:5e3e::2# fdfd:87b5:b475:5e3e::3

将此示例的输出与前一示例进行比较表明,主机地址不包括在整个网络上进行迭代时生成的第一个值。

除了迭代器协议之外,网络还支持in 操作python获取ip地址,来确定地址是否是网络的一部分。

import ipaddressNETWORKS = [ ipaddress.ip_network('10.9.0.0/24'), ipaddress.ip_network('fdfd:87b5:b475:5e3e::/64'),]ADDRESSES = [ ipaddress.ip_address('10.9.0.6'), ipaddress.ip_address('10.7.0.31'), ipaddress.ip_address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa'), ipaddress.ip_address('fe80::3840:c439:b25e:63b0'),]for ip in ADDRESSES: for net in NETWORKS: if ip in net: print('{}nis on {}'.format(ip, net)) break else: print('{}nis not on a known network'.format(ip)) print() # output# 10.9.0.6# is on 10.9.0.0/24# # 10.7.0.31# is not on a known network# # fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa# is on fdfd:87b5:b475:5e3e::/64# # fe80::3840:c439:b25e:63b0# is not on a known network

in使用网络掩码来测试地址,因此它比扩展网络上的完整地址列表更有效。

接口

网络接口表示网络上的特定地址python获取ip地址,并且可以由主机地址和网络前缀或网络掩码表示。

import ipaddressADDRESSES = [ '10.9.0.6/24', 'fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/64',]for ip in ADDRESSES: iface = ipaddress.ip_interface(ip) print('{!r}'.format(iface)) print('network:n ', iface.network) print('ip:n ', iface.ip) print('IP with prefixlen:n ', iface.with_prefixlen) print('netmask:n ', iface.with_netmask) print('hostmask:n ', iface.with_hostmask) print() # output# IPv4Interface('10.9.0.6/24')# network:# 10.9.0.0/24# ip:# 10.9.0.6# IP with prefixlen:# 10.9.0.6/24# netmask:# 10.9.0.6/255.255.255.0# hostmask:# 10.9.0.6/0.0.0.255# # IPv6Interface('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/64')# network:# fdfd:87b5:b475:5e3e::/64# ip:# fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa# IP with prefixlen:# fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/64# netmask:# fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/ffff:ffff:ffff:ffff::# hostmask:# fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/::ffff:ffff:ffff:ffff

接口对象具有分别访问完整网络和地址的属性,以及表达接口和网络掩码的几种不同方式。

相关文档:

本文地址: https://www.zhishidoc.com/27329.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 859089669@qq.com 举报,一经查实,本站将立刻删除。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年10月30日 下午1:11
下一篇 2022年10月30日 下午1:14

相关推荐

  • 描写儿童的诗句(经典4篇)

    在日常生活或是工作学习中,说到诗句,大家肯定都不陌生吧,诗句语言凝练而形象性强,具有鲜明的节奏。那什么样的诗句才算得上是经典呢?这次帅气的小编为您整理了描写儿童的诗句(经典4篇),您的肯定与分享是对小编最大的鼓励。8、儿童见说深惊讶,却问何方是故乡。____黄庭坚《牧童诗》____杜甫《小至》是谁摇曳柳枝快乐地舞蹈——黄庭坚《牧童诗》——王维《田园乐七首·其四》儿童漫相忆,行路岂知难。

    2022年11月1日
    10300
  • 学习两会精神心得|学校召开全国两会精神学习报告会(图文)

    3月27日下午,学校召开全国两会精神学习报告会。与此同时,赖明勇教授还传达了湖南省委书记杜家毫在湖南省传达学习全国两会精神会议上的讲话,并结合自身感受,解读了“科技体制改革”、“建设创新型国家”、“科技扶贫”等两会热点话题。陈伟在主持会议时强调,学习贯彻全国两会精神,是学校当前一项重要政治任务。

    2022年10月9日
    17300
  • qq说说怎么全部删除(说说怎么删除陌生人给自己点的赞)

    qq空间如何删除全部说说qq空间删除全部说说的步骤图1qq空间删除全部说说的步骤图2qq空间删除全部说说的步骤图3qq空间删除全部说说的步骤图4qq空间删除全部说说的步骤图5看了qq空间如何删除全部说说的人还看:在qq空间中如何批量删除说说qq空间说说怎么全部删除如何在qq空间里快速删除说说手机qq空间说说怎么全部删除手机qq空间说说怎么全部删除?

    2022年10月29日
    12800
  • 生意开业的祝福语

    生意开业的祝福语开张之日,祝福送上,祝开业大吉,事业红火。14、新店开业,特送生意经:和气多一点,财源大一点,服务好一点,生意兴隆点,待客和善点,财路更宽点。22、火红的事业财源广进,温馨的祝愿繁荣昌隆,美好的祝福送上来,愿您在收到我的短信后,生意兴隆,赚大钱啊。33、开业之际,短信早一秒,随后礼就到,人到门前贺,祝生意兴隆红红火火、财源广进日进斗金。【生意开业的祝福语】相关文章:

    2022年10月24日
    10900
  • 余生只爱你一人的昵称英文

    余生只爱你一人的昵称英文,很多人谈恋爱期间都会为自己的另一半起昵称,这是双方表达爱意的方式,将对方视为自己的独一无二,下面一起看看这篇文章了解一些余生只爱你一人的昵称英文。余生只爱你一人的昵称【余生只爱你一人的昵称英文】相关文章:给爱人的昵称备注英文男03-12给爱人的昵称备注可爱03-11男人喜欢被称呼的昵称03-11给爱人的昵称备注搞笑03-11给爱人的昵称备注法语03-11

    2022年10月15日
    26200

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注