File: //proc/thread-self/root/lib/python3.6/site-packages/netaddr/ip/__pycache__/nmap.cpython-36.pyc
3
��]� � @ s` d Z ddlmZ ddlmZmZ ddlmZmZm Z dd� Z
dd� Zd d
� Zdd� Z
d
d� ZdS )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 C s t � }x�| jd�D ]�}d|kr�|jdd�\}}|s6d}|s>d}t|�}t|�}d| ko`dkn o|d| koxdkn s�td| ��||kr�td| ��xXt||d �D ]}|j|� q�W qt|�}d| ko�dkn s�td| ��|j|� qW t|�S )N�,�-� r � z!octet value overflow for spec %s!z'left side of hyphen must be <= right %r)�set�split�int�
ValueErrorr �add�sorted)�spec�values�element�left�rightZlowZhighZoctet� r �/usr/lib/python3.6/nmap.py�_nmap_octet_target_values s* 0r c C sr t | �stdt| � ��| s$td��| jd�}t|�dkrFtd| ��t|d �t|d �t|d �t|d �fS )
Nzstring expected, not %sz*nmap target specification cannot be blank!�.� zinvalid nmap range: %sr r
� � )r � TypeError�typer r
�lenr r )�nmap_target_spec�tokensr r r �_generate_nmap_octet_ranges0 s
r# c
c s� d| krp| j dd�\}}dt|� k o.dk n s@td| ��t| �}|jdkrZtd��x�|D ]
}|V q`W n|d| kr�t| �V nht| �}x^|d D ]R}xL|d D ]@}x:|d D ].}x(|d
D ]} td|||| f d�V q�W q�W q�W q�W d S )N�/r
r �! zCIDR prefix expected, not %sr zCIDR only support for IPv4!�:r r z%d.%d.%d.%d)r
r r r �versionr r# )
�target_spec�_�prefixZnetZipZoctet_ranges�w�x�y�zr r r �_parse_nmap_target_specD s"