本文整理汇总了Python中netaddr.IPNetwork.cidrs方法的典型用法代码示例。如果您正苦于以下问题:Python IPNetwork.cidrs方法的具体用法?Python IPNetwork.cidrs怎么用?Python IPNetwork.cidrs使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类netaddr.IPNetwork
的用法示例。
在下文中一共展示了IPNetwork.cidrs方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: cidrize
# 需要导入模块: from netaddr import IPNetwork [as 别名]
# 或者: from netaddr.IPNetwork import cidrs [as 别名]
#.........这里部分代码省略.........
>>> c.cidrize('1.2.3.4-1.2.3.1099')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/j/jathan/sandbox/cidrize.py", line 153, in cidrize
raise CidrizeError(err)
cidrize.CidrizeError: base address '1.2.3.1099' is not IPv4
>>> c.cidrize('1.2.3.4-1.2.3.1099', modular=False)
["base address '1.2.3.1099' is not IPv4"]
:param strict:
Set to True to return explicit networks based on start/end addresses.
Example:
>>> import cidrize as c
>>> c.cidrize('1.2.3.4-1.2.3.10')
[IPNetwork('1.2.3.0/28')]
>>> c.cidrize('1.2.3.4-1.2.3.10', strict=True)
[IPNetwork('1.2.3.4/30'), IPNetwork('1.2.3.8/31'), IPNetwork('1.2.3.10/32')]
"""
ip = None
# Short-circuit to parse commas since it calls back here anyway
if ',' in ipstr:
return parse_commas(ipstr, strict=strict, modular=modular)
# Short-circuit for hostnames (we're assuming first char is alpha)
if hostname_re.match(ipstr):
raise CidrizeError('Cannot parse hostnames!')
# Otherwise try everything else
result = None
try:
# Parse "everything" & immediately return; strict/loose doesn't apply
if ipstr in EVERYTHING:
log.debug("Trying everything style...")
return [IPNetwork('0.0.0.0/0')]
# Parse old-fashioned CIDR notation & immediately return; strict/loose doesn't apply
# Now with IPv6!
elif cidr_re.match(ipstr) or is_ipv6(ipstr):
log.debug("Trying CIDR style...")
ip = IPNetwork(ipstr)
return [ip.cidr]
# Parse 1.2.3.118-1.2.3.121 range style
elif range_re.match(ipstr):
log.debug("Trying range style...")
result = parse_range(ipstr)
# Parse 1.2.3.4-70 hyphen style
elif hyphen_re.match(ipstr):
log.debug("Trying hyphen style...")
result = parse_hyphen(ipstr)
# Parse 1.2.3.* glob style
elif glob_re.match(ipstr):
log.debug("Trying glob style...")
ipglob = IPGlob(ipstr)
result = spanning_cidr(ipglob)
# Parse 1.2.3.4[5-9] or 1.2.3.[49] bracket style as a last resort
elif bracket_re.match(ipstr):
log.debug("Trying bracket style...")
result = parse_brackets(ipstr)
# If result still isn't set, let's see if it's IPv6??
elif result is None:
log.debug("Trying bare IPv6 parse...")
result = IPNetwork(ipstr)
# This will probably fail 100% of the time. By design.
else:
raise CidrizeError("Could not determine parse style for '%s'" % ipstr)
# If it's a single host, just return it wrapped in a list
if result.size == 1:
log.debug("Returning a single host!")
return [result.cidr]
# Logic to honor strict/loose, except IPRange. Doing a spanning_cidr on
# an IPRange can be super slow if the range is large (such as a /8), so
# IPRange objects larger than MAX_RANGE_LEN will always be strict.
if not strict:
if isinstance(result, IPRange) and result.size >= MAX_RANGE_LEN:
log.debug('IPRange objects larger than /18 will always be strict.')
return result.cidrs()
return [spanning_cidr(result)]
else:
try:
return result.cidrs() # IPGlob and IPRange have .cidrs()
except AttributeError as err:
return result.cidr # IPNetwork has .cidr
except (AddrFormatError, TypeError, ValueError) as err:
if modular:
raise CidrizeError(err)
return [str(err)]