cidrize解析ipv4/ipv6地址、cidr、范围和通配符匹配&尝试返回有效的ip地址列表

cidrize的Python项目详细描述


cidrize

智能分析IPv4/IPv6地址、CIDR、范围和通配符匹配 尝试返回有效的IP地址列表。

cidrize()函数完成了正确解析IP地址的所有工作。

支持的输入格式

输入非常灵活,可以有以下任何格式:

192.0.2.18
192.0.20.64/26
192.0.2.80-192.0.2.85
192.0.2.170-175
192.0.2.8[0-5]
192.0.2.[5678]

连字符范围不需要形成CIDR块,但起始编号必须 价值比结尾低。netaddr模块完成了大部分 为我们抬起来。

不支持的格式

网络掩码(例如192.0.2.0 255.255.255.0)和主机掩码(又称反向掩码, 192.0.2.0 0.0.0.255)符号此时不被接受。

cidrize函数返回一个合并的^{tt3}列表$ 物体。默认情况下,解析异常将引发一个CidrizeError(带有 modular=True的默认参数。您可以通过modular=False使 异常将被删除,错误文本将作为列表返回。这个 用于脚本或api,在接收异常时 优先考虑。

模块也可以作为脚本运行,以进行调试。

依赖关系

netaddr:对 IPv4、IPv6、CIDR、EUI和MAC网络地址

用法

启动您信任的旧python解释器,然后继续!

>>> from cidrize import cidrize

老式苹果酒

>>> cidrize("1.2.3.4")
[IPNetwork('1.2.3.4/32')]

带连字符的范围(默认值,strict=false)

>>> cidrize("2.4.6.8-2.4.6.80")
[IPNetwork('2.4.6.0/25')]

连字符范围strict(strict=true)

>>> cidrize("2.4.6.8-2.4.6.80", strict=True)
[IPNetwork('2.4.6.8/29'), IPNetwork('2.4.6.16/28'),
IPNetwork('2.4.6.32/27'), IPNetwork('2.4.6.64/28'),
IPNetwork('2.4.6.80/32')]

通配符

您可以使用星号提供通配符。这仅限于第四个八位组和最后一个八位组:

>>> cidrize("15.63.148.*")
[IPNetwork('15.63.148.0/24')]

括号内的范围

>>> cidrize("21.43.180.1[40-99]")
[IPNetwork('21.43.180.140/30'), IPNetwork('21.43.180.144/28'),
IPNetwork('21.43.180.160/27'), IPNetwork('21.43.180.192/29')]

糟透了!

坏的cidr前缀被直接拒绝:

>>> cidrize("1.2.3.38/40")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "cidrize.py", line 145, in cidrize
    raise CidrizeError(err)
cidrize.CidrizeError: CIDR prefix /40 out of range for IPv4!

古怪的范围?!

范围必须始终从下限到上限,否则会发生这种情况:

>>> cidrize("1.2.3.4-0")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "cidrize.py", line 145, in cidrize
    raise CidrizeError(err)
cidrize.CidrizeError: lower bound IP greater than upper bound!

CIDR工具

cidrize包还附带了cidr命令,该命令有两个基本操作。

简单输出:

% cidr 1.2.3.4/30
1.2.3.4/30

详细输出:

% cidr -v 1.2.3.4/30
Spanning CIDR:          1.2.3.4/30
Block Start/Network:    1.2.3.4
1st host:               1.2.3.5
Gateway:                1.2.3.6
Block End/Broadcast:    1.2.3.7
DQ Mask:                255.255.255.252
Cisco ACL Mask:         0.0.0.3
# of hosts:             2
Explicit CIDR blocks:   1.2.3.4/30

就这样!

许可证

cidrize是根据BSD 3-Clause License授权的。请看LICENSE.rst 详细情况。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在未知属性上的PUT和POST失败会引发不同的行为   java无法使GWTRPC正常工作   java如何在安卓中更改一个特定视图的主题?   机器学习为什么改变了java中等式的两面?   java继承和重定向标准输出   java为什么Clojure中嵌套循环/重复速度慢?   使用JavaParser解析Java代码并查找父节点的语句类型   java读取类的方法并在arraylist中存储Web服务的路径名   java模板聚合匹配和投影一个没有id的字段   java为什么给定数组不返回false   java如何链接JLabel和JSpinner以调整大小   在java中,当过滤器只返回一个对象时,如何使用流和过滤器将值填充到对象中   java为什么使用getInstance   如何得到我的。运行java命令的bat文件