
    $g                     D    d Z ddlmZ ddlmZmZ d Zd Zd Zd Z	d Z
d	S )
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	IPNetworkc                 n   t                      }|                     d          D ]}d|v r|                    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          ||k    rt          d|          t	          ||dz             D ]}|                    |           t          |          }d|cxk    rdk    sn t          d| d          |                    |           t          |          S )	N,-   r      zoctet value overflow for spec !z%left side of hyphen must be <= right )setsplitint
ValueErrorrangeaddsorted)specvalueselementleftrightlowhighoctets           O/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/netaddr/ip/nmap.py_nmap_octet_target_valuesr      s}    UUF::c??  '>>!--Q//KD%  d))Cu::D#_________1+;+;+;+;+;+;+;+; j!NOOOTzz jgg!WXXXsD1H-- " "

5!!!!" LLE%%%%#%%%% j!NOOOJJu&>>    c                    t          | t                    st          dt          |           z            | st	          d          |                     d          }t          |          dk    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	         )	
isinstancestr	TypeErrortyper   r   lenr   r   )nmap_target_spectokenss     r   _generate_nmap_octet_rangesr*   /   s     &,, L1D9I4J4JJKKK GEFFF##C((F
6{{ao:J:JLMMM 	"&),,!&),,!&),,!&),,	 r   c              #     K   d| v r{|                      dd          \  }}dt          |          cxk     rdk     sn t          d|          t          |           }|j        dk    rt          d          |D ]}|V  d S d| v rt          |           V  d S t          |           }|d         D ]<}|d         D ]1}|d	         D ]&}|d
         D ]}	t          d||||	fz  d          V  '2=d S )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:   E   s{     
k%%c1--	6CKK$$$$"$$$$!/FF"LMMM$$;!!"?@@@ 	 	BHHHH	 				$$$$$$$2;??a 	I 	IA!!_ I I%a I IA)!_ I I'Aq!(DaHHHHHHIII	I 	Ir   c                 ~    	 t          t          |                      dS # t          t          t          f$ r Y nw xY wdS )z
    :param target_spec: an nmap-style IP range target specification.

    :return: ``True`` if IP range target spec is valid, ``False`` otherwise.
    TF)nextr:   r%   r   r   )r0   s    r   valid_nmap_ranger=   [   sO    $[11222tz?3   5s     ::c               '   @   K   | D ]}t          |          D ]}|V  dS )aU  
    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@   i   sH       (  +K88 	 	DJJJJ	 r   N)__doc__netaddr.corer   
netaddr.ipr   r   r   r*   r:   r=   r@    r   r   <module>rE      s     ) ( ( ( ( ( + + + + + + + +  :  ,I I I,      r   