
    vKg~                        S r SSKrSSKr SSKrSSKrSSK
r
S rS r\" 5       r " S S\R                  5      r " S S\R"                  5      r " S	 S
\R&                  \R(                  5      r\S:X  a  SSKr \" \R2                  S   5      r\R:                  " \" \
R<                  S\5      5      r\ " S\RC                  S5      RE                  5       RG                  5       -   5        \ " S\RC                  S5      RE                  5       RG                  5       -   5        gg! \ a    SSKJr  SSKJ	r   GN"f = f! \\4 a    Sr Nf = f)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                 H    U R                  5       nUR                  U5        U$ N)copyupdate)abds      L/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/sockshandler.py
merge_dictr      s    	AHHQKH    c                      SU ;   a&  [         R                  " [         R                  U 5        gSU ;   a  [         R                  " U 5        gg!    g= f)N:.FT)socket	inet_ptonAF_INET6	inet_aton)ss    r
   is_ipr      sR    
!8V__a0  AXQ 	 s   +A A Ac                   $    \ rS rSrSS jrS rSrg)SocksiPyConnection*   Nc                 `    XX4XV4U l         [        R                  R                  " U /UQ70 UD6  g r   )	proxyargshttplibHTTPConnection__init__	self	proxytype	proxyaddr	proxyportrdnsusernamepasswordargskwargss	            r
   r   SocksiPyConnection.__init__+   s.    #	T''>t>v>r   c                    U R                   u  pp4pVU=(       a	    U[        ;  n  [        R                  " U R                  U R
                  4U R                  S XX4XV[        R                  [        R                  S445
      n Xpl        g ! [        R                   aR  nU(       aE  S[        U5      ;   a6  [        U R                  5      (       d  Sn[        R                  U5         S nAO	e S nAff = fM  )N   0x5bF)r   socks4_no_rdnssockscreate_connectionhostporttimeoutr   IPPROTO_TCPTCP_NODELAYSOCKS4Errorstrr   addsock)	r   r    r!   r"   r#   r$   r%   r7   es	            r
   connectSocksiPyConnection.connect/   s    FJnnCy7	7..YY		*DLL$)8((&*<*<a@BD  	 $$ Fc!f,U4995E5E !D"&&y11 s   AB	 	C/AC*)C**C/r   r7   NTNN__name__
__module____qualname____firstlineno__r   r9   __static_attributes__ r   r
   r   r   *   s    ?r   r   c                   $    \ rS rSrSS jrS rSrg)SocksiPyConnectionSC   Nc                 `    XX4XV4U l         [        R                  R                  " U /UQ70 UD6  g r   )r   r   HTTPSConnectionr   r   s	            r
   r   SocksiPyConnectionS.__init__D   s.    #	T((???r   c                    [         R                  U 5        U R                  R                  U R                  U R
                  S9U l        U R                  R                  (       dM  U R                  (       a;   [        R                  " U R                  R                  5       U R
                  5        g g g ! [         aE    U R                  R                  [        R                  5        U R                  R                  5         e f = f)N)server_hostname)r   r9   _contextwrap_socketr7   r/   check_hostname_check_hostnamesslmatch_hostnamegetpeercert	Exceptionshutdownr   	SHUT_RDWRclose)r   s    r
   r9   SocksiPyConnectionS.connectH   s    ""4(MM--dii-S	}}++0D0D""499#8#8#:DIIF 1E+  		""6#3#34		!s   69B2 2ADr;   r<   r=   rC   r   r
   rE   rE   C   s    @	r   rE   c                   &    \ rS rSrS rS rS rSrg)SocksiPyHandlerS   c                 Z    Xl         X l        [        R                  R	                  U 5        g r   )r&   kwurllib2HTTPHandlerr   )r   r&   r'   s      r
   r   SocksiPyHandler.__init__T   s     	$$T*r   c                 6   ^  SU 4S jjnT R                  X!5      $ )Nc                 d   > [        TR                  U5      n[        TR                  XUS.UD6nU$ N)r/   r0   r1   )r   r\   r   r&   r/   r0   r1   r'   r\   connr   s         r
   build(SocksiPyHandler.http_open.<locals>.buildZ   s1    DGGV,B%tyytPW^[]^DKr   Nr   do_openr   reqre   s   `  r
   	http_openSocksiPyHandler.http_openY       	 ||E''r   c                 6   ^  SU 4S jjnT R                  X!5      $ )Nc                 d   > [        TR                  U5      n[        TR                  XUS.UD6nU$ rb   )r   r\   rE   r&   rc   s         r
   re   )SocksiPyHandler.https_open.<locals>.builda   s1    DGGV,B&		QX_\^_DKr   rg   rh   rj   s   `  r
   
https_openSocksiPyHandler.https_open`   rn   r   )r&   r\   N)r>   r?   r@   rA   r   rl   rr   rB   rC   r   r
   rY   rY   S   s    +
((r   rY   __main__r*   iZ#  	localhostzHTTP: zhttp://httpbin.org/ipzHTTPS: zhttps://httpbin.org/ip)$__doc__r   rP   r]   r   ImportErrorurllib.requestrequesthttp.clientclientr-   r   r   setr,   r   r   rH   rE   r^   HTTPSHandlerrY   r>   sysintargvr0   
ValueError
IndexErrorbuild_openerPROXY_TYPE_SOCKS5openerprintopenreaddecoderC   r   r
   <module>r      sF    
"
 
 // 2'11  (g))7+?+? (( z388A; !!/%2I2I;X\"]^F	(V[[!89>>@GGI
IJ	)fkk":;@@BIIK
KL o  "$!!"v 
# s#   D! :D: !D76D7:
EE