o
    Ñ8j/  ã                   @   s¶   d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZG dd„ dƒZG d	d
„ d
eƒZG dd„ dƒZddd„ZdS )é    )Ú
connectionN)ÚmessageÚ	rdatatype)ÚHTTPAdapter)ÚPoolManager)ÚSocketOptionsAdapterc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Údnsc                 C   s   || _ tj| _| jt_d S ©N)Úurlr   Úcreate_connectionÚ_orig_create_connectionÚpatched_create_connection)Úselfr
   © r   ú/home/o11pro/scripts/o11.pyÚ__init__   s   zdns.__init__c                 C   sº   t | j d¡ƒdkr%| j d¡d |kr%t ¡ }dg|_t| |¡d ƒS | d¡dkr.|S dddœ}t	 
|tj¡}tj| j| ¡ |d	�}zt	 |j¡jd  ¡ d  ¡ W S    | Y S )
Nú/é   é   z1.1.1.1r   Ú.zapplication/dns-message)Úacceptzcontent-type)ÚdataÚheaders)Úlenr
   ÚsplitÚresolverÚResolverÚnameserversÚstrÚqueryÚcountr   Ú
make_queryr   ÚAÚrequestsÚpostÚto_wireÚ	from_wireÚcontentÚanswerÚto_rdatasetÚto_text)r   ÚhostÚmy_resolverr   ÚqÚresponser   r   r   Úresolve_dns   s   (þ zdns.resolve_dnsc                 O   s.   |\}}|   |¡}| j||fg|¢R i |¤ŽS r	   )r/   r   )r   ÚaddressÚargsÚkwargsr+   ÚportÚhostnamer   r   r   r   (   s   
zdns.patched_create_connectionN)Ú__name__Ú
__module__Ú__qualname__r   r/   r   r   r   r   r   r      s    r   c                   @   s   e Zd Zddd„ZdS )ÚTLS1_2_AdapterFc                 C   s   t |||tjd�| _d S )N)Ú	num_poolsÚmaxsizeÚblockÚssl_version)r   ÚsslÚPROTOCOL_TLSv1_2Úpoolmanager)r   Úconnectionsr:   r;   r   r   r   Úinit_poolmanager.   s
   ýzTLS1_2_Adapter.init_poolmanagerN)F)r5   r6   r7   rA   r   r   r   r   r8   -   s    r8   c                   @   s   e Zd Zddd„Zdd„ ZdS )	ÚsessionÚ Fc                 C   sè   t  ¡ | _|dkr[d|vrtjtj| ¡ fg}d}ng }| j d¡jt j	j
t j	j
|df|d� |rG| j d¡jt j	j
t j	j
|df|tjd� n| j d¡jt j	j
t j	j
|df|d� n
|re| j dtƒ ¡ |dkrr||dœ| j_d S d S )	NrC   r   zhttp://r   )r@   r:   Úsource_addressÚsocket_optionszhttps://)r@   r:   rD   rE   r<   )ÚhttpÚhttps)r#   ÚSessionrB   ÚsocketÚ
SOL_SOCKETÚSO_BINDTODEVICEÚencodeÚget_adapterrA   ÚadaptersÚDEFAULT_POOLSIZEr=   r>   Úmountr8   Úproxies)r   ÚbindÚproxyÚforce_tls1_2Úoptionsr   r   r   r   5   s>   
üûüÿzsession.__init__c                 C   s   | j S r	   )rB   )r   r   r   r   Úget_sessionZ   s   zsession.get_sessionN)rC   rC   F)r5   r6   r7   r   rV   r   r   r   r   rB   4   s    
%rB   rC   c                 C   sT   | D ]%}|  d¡d |kr't|  d¡ƒdkr'|t|  d¡d ƒd d …   S q|S )Nú=r   r   é   )r   r   )ÚparamsÚnameÚdefaultÚpr   r   r   Úparse_params]   s
   $"€r]   )rC   )Úurllib3.utilr   Údns.resolverr   r   r   r   Úrequests.adaptersr   Ú%requests.packages.urllib3.poolmanagerr   Ú)requests_toolbelt.adapters.socket_optionsr   r#   r=   rI   ÚjsonÚbase64r8   rB   r]   r   r   r   r   Ú<module>   s     )