Ë
    ÓŠð^î  ã                   óV   — d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 d„ Z
d„ Zd„ Zd„ Zd	„ Zy
)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_nextc                 óü  — t        «       }| j                  d«      D ]Ô  }d|v r–|j                  dd«      \  }}|sd}|sd}t        |«      }t        |«      }d|cxk  rdk  rn nd|cxk  rdk  sn t        d| ›d�«      ‚||kD  rt        d|›�«      ‚t	        ||dz   «      D ]  }|j                  |«       Œ Œ�t        |«      }d|cxk  rdk  sn t        d| ›d�«      ‚|j                  |«       ŒÖ t        |«      S )	Nú,ú-é   r   éÿ   zoctet value overflow for spec ú!z%left side of hyphen must be <= right )ÚsetÚsplitÚintÚ
ValueErrorr   ÚaddÚsorted)ÚspecÚvaluesÚelementÚleftÚrightÚlowÚhighÚoctets           ú1/usr/lib/python3/dist-packages/netaddr/ip/nmap.pyÚ_nmap_octet_target_valuesr      sý   € ô ‹U€Fà—:‘:˜c“?ò ˆØ�'‰>Ø!Ÿ-™-¨¨QÓ/‰KˆD�%ÙØ�ÙØ�Ü�d“)ˆCÜ�u“:ˆDØ˜#”_ •_¨1°Ô+;¸Ô+;Ý ÊÐ!NÓOÐOØ�TŠzÝ ÉgÐ!WÓXÐXÜ$ S¨$°©(Ó3ò "�Ø—
‘
˜5Õ!ñ"ô ˜“LˆEØ˜Ô% #Ô%Ý ÊÐ!NÓOÐOØ�J‰J�uÕð'ô* �&‹>Ðó    c                 ó&  — t        | «      st        dt        | «      z  «      ‚| st        d«      ‚| j	                  d«      }t        |«      dk7  rt        d| ›�«      ‚t        |d   «      t        |d   «      t        |d   «      t        |d	   «      fS )
Nzstring expected, not %sz*nmap target specification cannot be blank!ú.é   zinvalid nmap range: r   r   é   é   )r   Ú	TypeErrorÚtyper   r   Úlenr   r   )Únmap_target_specÚtokenss     r   Ú_generate_nmap_octet_rangesr*   0   s˜   € ô Ð#Ô$ÜÐ1´DÐ9IÓ4JÑJÓKÐKáÜÐEÓFÐFà×#Ñ# CÓ(€Fä
ˆ6ƒ{�aÒÝÑ:JÐLÓMÐMä% f¨Q¡iÓ0Ü% f¨Q¡iÓ0Ü% f¨Q¡iÓ0Ü% f¨Q¡iÓ0ð2ð 2r   c              #   óœ  K  — d| v rj| j                  dd«      \  }}dt        |«      cxk  rdk  sn t        d|›�«      ‚t        | «      }|j                  dk7  rt        d«      ‚|D ]  }|–— Œ y d| v rt        | «      –— y t        | «      }|d   D ]5  }|d   D ]+  }|d	   D ]!  }|d
   D ]  }	t        d||||	fz  d«      –— Œ Œ# Œ- Œ7 y ­w)Nú/r   r   é!   zCIDR prefix expected, not r"   zCIDR only support for IPv4!ú:r#   r$   z%d.%d.%d.%d)r   r   r   r   Úversionr   r*   )
Útarget_specÚ_ÚprefixÚnetÚipÚoctet_rangesÚwÚxÚyÚzs
             r   Ú_parse_nmap_target_specr:   D   s  è ø€ Ø
ˆkÑØ×%Ñ% c¨1Ó-‰	ˆˆ6Ø”C˜“KÔ$ "Ô$Ý!ÁFÐ"LÓMÐMÜ˜Ó$ˆØ�;‰;˜!ÒÜ!Ð"?Ó@Ð@Øò 	ˆBØ‹Hñ	à	�Ñ	ä˜Ó$Ó$ä2°;Ó?ˆØ˜a‘ò 	IˆAØ! !‘_ò I�Ø% a™ò I�AØ)¨!™_ò I˜Ü'¨¸¸A¸qÀ!¸Ñ(DÀaÓHÓHñIñIñIñ	Iùs   ‚C
Cc                 ób   — 	 t        t        | «      «       y# t        t        t        f$ r Y yw xY w)z˜
    :param target_spec: an nmap-style IP range target specification.

    :return: ``True`` if IP range target spec is valid, ``False`` otherwise.
    TF)r   r:   r%   r   r   )r0   s    r   Úvalid_nmap_ranger<   Z   s4   € ðÜÔ*¨;Ó7Ô8ØøÜ”z¤?Ð3ò ØØðús   ‚ —.­.c               '   óB   K  — | D ]  }t        |«      D ]  }|–— Œ Œ y­w)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(   r0   Úaddrs      r   Úiter_nmap_ranger?   h   s0   è ø€ ð (ò ˆÜ+¨KÓ8ò 	ˆDØ‹Jñ	ñùs   ‚N)Ú__doc__Únetaddr.corer   Ú
netaddr.ipr   r   Únetaddr.compatr   r   r   r   r*   r:   r<   r?   © r   r   ú<module>rE      s2   ðñõ )ß +ß ;Ñ ;òò:2ò(Iò,ór   