o
    ;f/                     @   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/o11_V4/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ResolverZnameserversstrquerycountr   Z
make_queryr   ArequestspostZto_wireZ	from_wirecontentZanswerZto_rdatasetZto_text)r   hostZ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   connectionsr2   r3   r   r   r   init_poolmanager.   s
   zTLS1_2_Adapter.init_poolmanagerN)F)r-   r.   r/   r9   r   r   r   r   r0   -   s    r0   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 )	Nr;   r   zhttp://r   )r8   r2   source_addresssocket_optionszhttps://)r8   r2   r<   r=   r4   )httphttps)r!   Sessionr:   socket
SOL_SOCKETSO_BINDTODEVICEencodeget_adapterr9   adaptersDEFAULT_POOLSIZEr5   r6   mountr0   proxies)r   bindproxyZforce_tls1_2optionsr   r   r   r   5   s>   
zsession.__init__c                 C   s   | j S r	   )r:   )r   r   r   r   get_sessionZ   s   zsession.get_sessionN)r;   r;   F)r-   r.   r/   r   rM   r   r   r   r   r:   4   s    
%r:   r;   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
   $"rT   )r;   )Zurllib3.utilr   Zdns.resolverr   r   r   r   Zrequests.adaptersr   Z%requests.packages.urllib3.poolmanagerr   Z)requests_toolbelt.adapters.socket_optionsr   r!   r5   rA   jsonbase64r0   r:   rT   r   r   r   r   <module>   s     )