ӊ^VdZddlmZddlmZmZddlmZmZm Z dZ dZ dZ dZ d Zy ) z Routines for dealing with nmap-style IPv4 address ranges. Based on nmap's Target Specification :- http://nmap.org/book/man-target-specification.html )AddrFormatError) IPAddress IPNetwork) _iter_range_is_str _iter_nextct}|jdD]}d|vr|jdd\}}|sd}|sd}t|}t|}d|cxkrdkrnn d|cxkrdksntd|d||kDrtd|t ||dzD]}|j |t|}d|cxkrdksntd|d|j |t |S) N,-rzoctet value overflow for spec !z%left side of hyphen must be <= right )setsplitint ValueErrorraddsorted)specvalueselementleftrightlowhighoctets 1/usr/lib/python3/dist-packages/netaddr/ip/nmap.py_nmap_octet_target_valuesrsUF::c? '>!--Q/KD%d)Cu:D#__1+;+; !NOOTz g!WXX$S$(3 " 5! "LE%#% !NOO JJu '* &>c&t|stdt|z|s td|j d}t |dk7rt d|t|dt|dt|dt|d fS) Nzstring expected, not %sz*nmap target specification cannot be blank!.zinvalid nmap range: rr )r TypeErrortyperrlenrr)nmap_target_spectokenss r_generate_nmap_octet_rangesr*0s # $1D9I4JJKK EFF  # #C (F 6{a:JLMM %fQi 0 %fQi 0 %fQi 0 %fQi 0 22rc #Kd|vrj|jdd\}}dt|cxkrdksntd|t|}|jdk7r td|D]}|yd|vrt |yt |}|dD]5}|dD]+}|d D]!}|d D]} t d |||| fzd#-7yw) N/r r!zCIDR prefix expected, not r"zCIDR only support for IPv4!:r#r$z %d.%d.%d.%d)rrrrversionrr*) target_spec_prefixnetip octet_rangeswxyzs r_parse_nmap_target_specr:Ds k%%c1- 6CK$"$!F"LM M $ ;;! !"?@ @ BH   $$2;? a IA!!_ I%aIA)!_I' Aq! (DaHHII I IsC C cb tt|y#tttf$rYywxYw)z :param target_spec: an nmap-style IP range target specification. :return: ``True`` if IP range target spec is valid, ``False`` otherwise. TF)rr:r%rr)r0s rvalid_nmap_ranger<Zs4  *;78 z? 3   s ..c'BK|D]}t|D]}|yw)aV An generator that yields IPAddress objects from defined by nmap target specifications. See https://nmap.org/book/man-target-specification.html for details. :param *nmap_target_spec: one or more nmap IP range target specification. :return: an iterator producing IPAddress objects for each IP in the target spec(s). N)r:)r(r0addrs riter_nmap_ranger?hs0( +K8 DJ sN)__doc__ netaddr.corer netaddr.iprrnetaddr.compatrrrrr*r:r<r?rrrEs2 )+;;:2(I,  r