ó €aUc@sddZddlmZddlmZddlmZmZd„Zd„Z d„Z d„Z d S( sœ Routines for dealing with nmap-style IPv4 address ranges. Based on nmap's Target Specification :- http://nmap.org/book/man-target-specification.html iÿÿÿÿ(tAddrFormatError(t IPAddress(t _iter_ranget_is_strcCsgtƒ}xQ|jdƒD]@}d|kr|jddƒ\}}|sRd}n|sad}nt|ƒ}t|ƒ}d|kodkno®d|ko¬dknsÄtd|ƒ‚n||krãtd|ƒ‚nxst||dƒD]}|j|ƒq÷Wqt|ƒ}d|ko4dknsLtd|ƒ‚n|j|ƒqWt|ƒS(Nt,t-iiiÿs!octet value overflow for spec %s!s'left side of hyphen must be <= right %r(tsettsplittintt ValueErrorRtaddtsorted(tspectvaluestelementtlefttrighttlowthightoctet((s3/usr/lib/python2.7/site-packages/netaddr/ip/nmap.pyt_nmap_octet_target_valuess*      8  cCs¦t|ƒs%tdt|ƒƒ‚n|s:tdƒ‚n|jdƒ}t|ƒdkrntd|ƒ‚nt|dƒt|dƒt|dƒt|d ƒfS( Nsstring expected, not %ss*nmap target specification cannot be blank!t.isinvalid nmap range: %siiii(Rt TypeErrorttypeR RtlenRR(tnmap_target_specttokens((s3/usr/lib/python2.7/site-packages/netaddr/ip/nmap.pyt_generate_nmap_octet_ranges0s    cCs3yt|ƒtSWntttfk r.nXtS(s :param nmap_target_spec: an nmap-style IP range target specification. :return: ``True`` if IP range target spec is valid, ``False`` otherwise. (RtTrueRR RtFalse(R((s3/usr/lib/python2.7/site-packages/netaddr/ip/nmap.pytvalid_nmap_rangeDs  c cs‚t|ƒ}xo|dD]c}xZ|dD]N}xE|dD]9}x0|dD]$}td||||fdƒVqJWq9Wq(WqWdS(s^ The nmap security tool supports a custom type of IPv4 range using multiple hyphenated octets. This generator provides iterators yielding IP addresses according to this rule set. :param nmap_target_spec: an nmap-style IP range target specification. :return: an iterator producing IPAddress objects for each IP in the range. iiiis %d.%d.%d.%diN(RR(Rt octet_rangestwtxtytz((s3/usr/lib/python2.7/site-packages/netaddr/ip/nmap.pytiter_nmap_rangeRs N( t__doc__t netaddr.coreRt netaddr.ipRtnetaddr.compatRRRRRR$(((s3/usr/lib/python2.7/site-packages/netaddr/ip/nmap.pyt s