U
    ;g~                  	   @   s<  d Z ddlZddlZzddlZddlZW n, ek
rT   ddlmZ ddlm	Z Y nX ddl
Z
dd Zdd Ze ZG dd dejZG d	d
 d
ejZG dd dejejZedkr8ddlZzeejd ZW n eefk
r   dZY nX eee
jdeZe de!d" #   e de!d" #   dS )z
SocksiPy + urllib2 handler

version: 0.3
author: e<e@tr0ll.in>

This module provides a Handler which you can use with urllib2 to allow it to tunnel your connection through a socks.sockssocket socket, with out monkey patching the original socket...
    Nc                 C   s   |   }|| |S N)copyupdate)abd r   L/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/sockshandler.py
merge_dict   s    
r
   c                 C   sN   z6d| krt t j|  nd| kr.t |  nW dS W n   Y dS X dS d S )N:.FT)socket	inet_ptonAF_INET6	inet_aton)sr   r   r	   is_ip   s    
r   c                   @   s   e Zd ZdddZdd ZdS )SocksiPyConnectionNTc           	      O   s*   ||||||f| _ tjj| f|| d S r   )	proxyargshttplibHTTPConnection__init__	self	proxytype	proxyaddr	proxyportrdnsusernamepasswordargskwargsr   r   r	   r   +   s    zSocksiPyConnection.__init__c           	      C   s   | j \}}}}}}|o|tk}z:t| j| jf| jd ||||||tjtj	dff
}W qW q tj
k
r } z0|rdt|krt| jsd}t| n W 5 d }~X Y qX q|| _d S )N   Z0x5bF)r   socks4_no_rdnssockscreate_connectionhostporttimeoutr   IPPROTO_TCPTCP_NODELAYZSOCKS4Errorstrr   addsock)	r   r   r   r   r   r   r   r-   er   r   r	   connect/   s,    
       zSocksiPyConnection.connect)NTNN__name__
__module____qualname__r   r/   r   r   r   r	   r   *   s   
r   c                   @   s   e Zd ZdddZdd ZdS )SocksiPyConnectionSNTc           	      O   s*   ||||||f| _ tjj| f|| d S r   )r   r   HTTPSConnectionr   r   r   r   r	   r   D   s    zSocksiPyConnectionS.__init__c                 C   sz   t |  | jj| j| jd| _| jjsv| jrvzt	| j
 | j W n. tk
rt   | jtj | j   Y nX d S )N)server_hostname)r   r/   _contextwrap_socketr-   r&   check_hostname_check_hostnamesslmatch_hostnamegetpeercert	Exceptionshutdownr   	SHUT_RDWRcloser   r   r   r	   r/   H   s    

zSocksiPyConnectionS.connect)NTNNr0   r   r   r   r	   r4   C   s   
r4   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )SocksiPyHandlerc                 O   s   || _ || _tj|  d S r   )r    kwurllib2HTTPHandlerr   )r   r    r!   r   r   r	   r   T   s    zSocksiPyHandler.__init__c                    s   d fdd	}  ||S )Nr   c                    s(   t  j|}t j| ||d|}|S N)r&   r'   r(   )r
   rD   r   r    r&   r'   r(   r!   rD   connrB   r   r	   buildZ   s    z(SocksiPyHandler.http_open.<locals>.build)Nr   do_openr   reqrJ   r   rB   r	   	http_openY   s    zSocksiPyHandler.http_openc                    s   d fdd	}  ||S )Nr   c                    s(   t  j|}t j| ||d|}|S rG   )r
   rD   r4   r    rH   rB   r   r	   rJ   a   s    z)SocksiPyHandler.https_open.<locals>.build)Nr   rK   rM   r   rB   r	   
https_open`   s    zSocksiPyHandler.https_openN)r1   r2   r3   r   rO   rP   r   r   r   r	   rC   S   s   rC   __main__r"   iZ#  	localhostzHTTP: zhttp://httpbin.org/ipzHTTPS: zhttps://httpbin.org/ip)$__doc__r   r;   rE   r   ImportErrorurllib.requestrequesthttp.clientclientr$   r
   r   setr#   r   r   r5   r4   rF   HTTPSHandlerrC   r1   sysintargvr'   
ValueError
IndexErrorbuild_openerZPROXY_TYPE_SOCKS5openerprintopenreaddecoder   r   r   r	   <module>   s0   

