a
    kÄ#dÅ  ã                   @   s¢   d Z ddlmZ ddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZ G dd„ dƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeƒ e_dS )z"
Resolve Autonomous Systems (AS).
é    )Úabsolute_importN)Úconf)Ú	plain_str)ÚAnyÚOptionalÚTupleÚListc                   @   sF   e Zd ZdZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚAS_resolverNz-ké+   c                 C   s&   |d ur|| _ || _|d ur"|| _d S ©N)ÚserverÚportÚoptions)Úselfr   r   r   © r   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/as_resolvers.pyÚ__init__   s
    zAS_resolver.__init__c                 C   sT   t   t jt j¡| _| j | j| jf¡ | jrP| j | j 	d¡d ¡ | j 
d¡ d S )NÚutf8ó   
é    )ÚsocketÚAF_INETÚSOCK_STREAMÚsÚconnectr   r   r   ÚsendÚencodeÚrecv©r   r   r   r   Ú_start$   s
    zAS_resolver._startc                 C   s   | j  ¡  d S r   )r   Úcloser   r   r   r   Ú_stop,   s    zAS_resolver._stopc                 C   s‚   d\}}|  ¡ D ]`}|s6| d¡r6t|dd …  ¡ ƒ}| d¡r`|rL|d7 }||dd …  ¡ 7 }|d ur|r qrq|t| ¡ ƒfS )N)Nó    s   origin:é   s   descr:r   é   )Ú
splitlinesÚ
startswithr   Ústrip)r   ÚtxtÚasnÚdescÚliner   r   r   Ú_parse_whois0   s    
zAS_resolver._parse_whoisc                 C   sT   | j  d|  d¡¡ d}d|v s<d|v s<|| j  d¡7 }q|  |¡\}}|||fS )Nz%s
r   r"   ó   %s   sourcer   )r   r   r   r   r,   )r   ÚipÚxr)   r*   r   r   r   Ú_resolve_one>   s    zAS_resolver._resolve_onec                 G   sJ   |   ¡  g }|D ],}|  |¡\}}}|d ur| |||f¡ q|  ¡  |S r   )r   r0   Úappendr!   )r   ÚipsÚretr.   r)   r*   r   r   r   ÚresolveG   s    zAS_resolver.resolve)Nr
   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r!   r,   r0   r4   r   r   r   r   r	      s   
	r	   c                   @   s   e Zd ZdZdZdS )ÚAS_resolver_riswhoiszriswhois.ripe.netz-k -M -1N©r5   r6   r7   r   r   r   r   r   r   r8   U   s   r8   c                   @   s   e Zd ZdZdZdS )ÚAS_resolver_radbzwhois.ra.netz-k -MNr9   r   r   r   r   r:   Z   s   r:   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚAS_resolver_cymruzwhois.cymru.comNc                 G   sx   t   t jt j¡}| | j| jf¡ | dd dd„ |D ƒ¡ d ¡ d}| d¡}|dkr\qf||7 }qH| 	¡  |  
|¡S )Ns   begin
s   
c                 s   s   | ]}|  ¡ V  qd S r   )r   ©Ú.0r.   r   r   r   Ú	<genexpr>k   r"   z,AS_resolver_cymru.resolve.<locals>.<genexpr>s   
end
r"   r   )r   r   r   r   r   r   r   Újoinr   r    Úparse)r   r2   r   Úrr+   r   r   r   r4   c   s     ÿþÿ

zAS_resolver_cymru.resolvec                 C   sh   g }t |ƒ ¡ dd… D ]J}d|vr&qdd„ | d¡D ƒ\}}}|dkrJqd| }| |||f¡ q|S )zParse bulk cymru dataé   Nú|c                 S   s   g | ]}|  ¡ ‘qS r   )r'   )r=   Úeltr   r   r   Ú
<listcomp>€   r"   z+AS_resolver_cymru.parse.<locals>.<listcomp>ZNAzAS%s)r   r%   Úsplitr1   )r   ÚdataZASNlistr+   r)   r.   r*   r   r   r   r@   x   s    zAS_resolver_cymru.parse)r5   r6   r7   r   r   r4   r@   r   r   r   r   r;   _   s   r;   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAS_resolver_multic                 G   s(   t  | ¡ |r|| _ntƒ tƒ f| _d S r   )r	   r   Úresolvers_listr:   r;   )r   Zreslistr   r   r   r   ‰   s    
ÿzAS_resolver_multi.__init__c              	      sf   |}g }| j D ]R}z|j|Ž ‰ W n tjy8   Y qY n0 t‡ fdd„|D ƒƒ}|ˆ 7 }|s qbq|S )Nc                 3   s$   | ]}|d d„ ˆ D ƒvr|V  qdS )c                 S   s   g | ]}|d  ‘qS )r   r   )r=   rA   r   r   r   rE   ›   r"   z7AS_resolver_multi.resolve.<locals>.<genexpr>.<listcomp>Nr   r<   ©Úresr   r   r>   ›   r"   z,AS_resolver_multi.resolve.<locals>.<genexpr>)rI   r4   r   ÚerrorÚtuple)r   r2   Útodor3   ZASresr   rJ   r   r4   ’   s    

zAS_resolver_multi.resolveN)r5   r6   r7   r   r4   r   r   r   r   rH   ˆ   s   	rH   )Ú__doc__Ú
__future__r   r   Zscapy.configr   Zscapy.compatr   r   r   r   r   r	   r8   r:   r;   rH   r   r   r   r   Ú<module>   s   =)