当前位置:
首页 > Python基础教程 >
-
Python3标准库:ipaddress Internet地址
1. ipaddress Internet地址
ipaddress模块提供了处理IPv4和IPv6网络地址的类。这些类支持验证,查找网络上的地址和主机,以及其他常见操作。
1.1 地址
最基本的对象表示网络地址本身。可以向ip_address()传入一个字符串、整数或字节序列来构造一个地址。返回值是一个IPV4Address或IPv6Address实例,这取决于使用什么类型的地址。
- import binascii
- import ipaddress
- ADDRESSES = [
- '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()
这两个类可以提供地址的不同表示以满足不同的用途,还可以回答一些基本断言,如这个地址是否为组播通信保留,或者它是否在一个专用网(private network)中。
1.2 网络
网络由一个地址范围定义。通常用一个基本地址和一个掩码表示,掩码指示地址的哪些部分表示网络,哪些部分表示该网络上的地址。可以显式表示掩码,也可以使用一个前缀长度值来表示,如下例所示。
- import ipaddress
- NETWORKS = [
- '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()
与地址一样,对应IPv4和IPv6网络分别有两个网络类。每个类都提供了一些属性或方法来访问与网络相关的值,如广播地址和主机可以使用的网络地址。
网络实例是可迭代的,会提供网络上的地址。
- import ipaddress
- NETWORKS = [
- '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()
这个例子只打印了部分地址,因为IPv6网络可能包含太多的地址,无法在这里全部输出。
迭代处理网络会提供地址,不过并不是所有这些地址都能作为主机的合法地址。例如,网络的基地址和广播地址也包含在内。要查找能够由网络上常规主机使用的地址,可以使用hosts()方法,它会生成一个生成器。
- import ipaddress
- NETWORKS = [
- '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()
将这个例子的输出与前一个例子进行比较,可以看到,主机地址中不包含迭代处理整个网络时生成的前几个值。
除了迭代器协议,网络还支持in操作符,可以用来确定一个地址是否是一个网络的一部分。
- import ipaddress
- NETWORKS = [
- 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
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式