
    @OOf(                       d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ ej.                  dk  rd dlmZ nd dlmZ  G d dej6                        Z G d dej6                        Z G d dej6                  e      Z G d de      Z G d de      Z dZ!d Z"dZ#dZ$dZ%dZ&dZ'dZ(d Z)d!Z*e
 G d" d#             Z+e
 G d$ d%e             Z, G d& d'e      Z-y)(    )annotationsN)ABCMeta)Callable)	dataclass)
connection)commands)events)layer)	StartHook)ReverseMode)expect)      )assert_neverc                  >    e Zd Z eej
                        dd       Zy)	HttpProxyc              #     K   t        j                  | j                        }|j                  | _        |j                  |      E d {    y 7 wNr
   	NextLayercontexthandle_event_handle_eventselfeventchild_layers      ]/var/www/premiumrankchecker/venv/lib/python3.12/site-packages/mitmproxy/proxy/layers/modes.pyr   zHttpProxy._handle_event   :     oodll3(55++E222   AAAANr   zevents.Eventreturnlayer.CommandGenerator[None]__name__
__module____qualname__r   r	   Startr        r   r   r          FLL3 3r*   r   c                  >    e Zd Z eej
                        dd       Zy)HttpUpstreamProxyc              #     K   t        j                  | j                        }|j                  | _        |j                  |      E d {    y 7 wr   r   r   s      r   r   zHttpUpstreamProxy._handle_event!   r   r    Nr!   r$   r)   r*   r   r-   r-       r+   r*   r-   c                  l    e Zd ZU dZded<   ddZ eej                  ej                        dd       Z
y)	DestinationKnownzPBase layer for layers that gather connection destination info and then delegate.zlayer.Layerr   c              #    K   | j                   j                  j                  dk(  r| j                   j                  j                  rc| j                   j                  j
                  dk(  r@t        j                  | j                   j                        }|r| j                  | _	        |S | j                  j                  | _	        | j                  j                  t        j                               E d {    y 7 w)Neagertcp)r   optionsconnection_strategyserveraddresstransport_protocolr   OpenConnectiondoner   r   r   r	   r(   )r   errs     r   finish_startzDestinationKnown.finish_start-   s     LL  44?##++##66%? //0C0CDDC%)YY"
!--::##00@@@ 	As   C2C<4C:5C<c              #  $   K   dE d {    y 7 w)Nr)   r)   )r   _s     r   r:   zDestinationKnown.done<   s     s   N)r"   z"layer.CommandGenerator[str | None]r"   r#   )r%   r&   r'   __doc____annotations__r<   r   r	   DataReceivedConnectionClosedr:   r)   r*   r   r0   r0   (   s7    Z F!8!89 :r*   r0   )	metaclassc                  >    e Zd Z eej
                        dd       Zy)ReverseProxyc              #    K   | j                   j                  j                  }t        |t              sJ |j
                  | j                   j                  _        t        j                  | j                         | _	        |j                  xxdk(  rnxdk(  rnxdk(  rnxdk(  rnxdk(  rn nK  | j                   j                  j                  s[|j
                  d   | j                   j                  _        n2xdk(  rnxdk(  rnxd	k(  rnxd
k(  rn n n	 t        |j                         | j                         E d {   }|r,t!        j"                  | j                   j                         y y 7 3w)Nhttp3quichttpstlsdtlsr   r3   httpudpdns)r   client
proxy_mode
isinstancer   r7   r6   r
   r   r   schemer4   keep_host_headersnir   r<   r   CloseConnection)r   r   specr;   s       r   r   zReverseProxy._handle_eventB   s     ||""--$,,,&*ll# ??4<<8 kk<6Gef<||++<<.2ll1oDLL''+%%/T[[)**,,**4<<+>+>??  -s   D8E0:E.;4E0Nr!   r$   r)   r*   r   rF   rF   A   s    FLL@ @r*   rF   c                  >    e Zd Z eej
                        dd       Zy)TransparentProxyc              #  2  K   | j                   j                  j                  sJ d       t        j                  | j                         | _        | j                         E d {   }|r,t        j                  | j                   j                         y y 7 3w)NzNo server address set.)
r   r6   r7   r
   r   r   r<   r   rV   rP   )r   r   r;   s      r   r   zTransparentProxy._handle_eventZ   ss     ||""**D,DD* ??4<<8**,,**4<<+>+>??  -s   AB!B"4BNr!   r$   r)   r*   r   rY   rY   Y   s    FLL@ @r*   rY               r            c                  :    e Zd ZU ded<   ded<   ded<   dZded<   y	)
Socks5AuthDatazconnection.Clientclient_connstrusernamepasswordFboolvalidN)r%   r&   r'   rA   ri   r)   r*   r   rc   rc   r   s    ""MME4r*   rc   c                      e Zd ZU dZded<   y)Socks5AuthHookz
    Mitmproxy has received username/password SOCKS5 credentials.

    This hook decides whether they are valid by setting `data.valid`.
    rc   dataN)r%   r&   r'   r@   rA   r)   r*   r   rk   rk   z   s     r*   rk   c                      e Zd ZU dZded<   	 d	 	 	 	 	 ddZ eej                  ej                  ej                        dd       ZddZeZded	<   dd
ZddZy)Socks5Proxyr*   bytesbufNc              #  2  K   |>t        j                  | j                  j                  t	        t
        |g      dz          t        j                  | j                  j                         t        j                  |       | j                  | _	        y w)Ns          )
r   SendDatar   rP   ro   SOCKS5_VERSIONrV   Logr:   r   )r   message
reply_codes      r   	socks_errzSocks5Proxy.socks_err   s{     
 !####~z2356 
 &&t||':':;;ll7##!YYs   BBc              #    K   t        |t        j                        ry t        |t        j                        r8| xj                  |j
                  z  c_        | j                         E d {    y t        |t        j                        rR| j                  r$t        j                  d| j                         t        j                  |j                         y t        d|       7 w)Nz=Client closed connection before completing SOCKS5 handshake: zUnknown event: )rR   r	   r(   rB   rp   rl   staterC   r   rt   rV   r   AssertionError)r   r   s     r   r   zSocks5Proxy._handle_event   s     eV\\*v223HH

"Hzz|##v667xxllSTXT\T\S_`  **5+;+;<< ?5'!:;; $s   A(C,*C*+B C,c              #    K   t        | j                        dk  ry | j                  d   t        k7  rO| j                  d d j                         rd}nd}| j	                  |d| j                  d   z  z         E d {    y | j                  d   }t        | j                        d|z   k  ry d| j
                  j                  v r8| j
                  j                  j                  rt        }| j                  | _
        nt        }| j                  | _
        || j                  dd|z    vr0|t        k(  rd	nd
}| j	                  d| dt              E d {    y t        j                  | j
                  j                   t#        t        |g             | j                  d|z   d  | _        | j                         E d {    y 7 G7 s7 
w)Nr\   r   r   z9Probably not a SOCKS request but a regular HTTP request.  z.Invalid SOCKS version. Expected 0x05, got 0x%xr^   	proxyauthzuser/passwordnoz$Client does not support SOCKS5 with z authentication.)lenrp   rs   isupperrw   r   r4   r}   *SOCKS5_METHOD_USER_PASSWORD_AUTHENTICATION
state_authry   (SOCKS5_METHOD_NO_AUTHENTICATION_REQUIREDstate_connect#SOCKS5_METHOD_NO_ACCEPTABLE_METHODSr   rr   rP   ro   )r   guess	n_methodsmethod
method_strs        r   state_greetzSocks5Proxy.state_greet   s    txx=188A;.(xx|##%S~~H488TU;VV   HHQK	txx=1y=($,,...4<<3G3G3Q3Q?FDJ=F++DJ!a)m44 GG   
 ~~6zlBRS3    3 3UNF;S5TUU88A	MO,::<;, 	 s8   A9G	;G<CG	GA*G	<G=G	G	G	z+Callable[..., layer.CommandGenerator[None]]ry   c              #  p  K   t        | j                        dk  ry | j                  d   }t        | j                        d|z   k  ry | j                  d|z      }t        | j                        d|z   |z   k  ry | j                  dd|z    j                  dd      }| j                  d|z   d|z   |z    j                  dd      }t        | j                  j
                  ||      }t        |       |j                  sFt        j                  | j                  j
                  d       | j                  d      E d {    y t        j                  | j                  j
                  d       | j                  d|z   |z   d  | _        | j                  | _        | j                         E d {    y 7 u7 w)	Nr   r^   r\   zutf-8backslashreplaces   zauthentication faileds    )r   rp   decoderc   r   rP   rk   ri   r   rr   rw   r   ry   )r   user_lenpass_lenuserrg   rl   s         r   r   zSocks5Proxy.state_auth   s|    txx=1 88A;txx=1x<'88AL)txx=1x<(22xxQ\+227<NO88Q\a(lX.EGNN'
 dll114BT""zz##DLL$7$7EE~~&=>>> 3 3[AA88AL8356''
::< ? 	 s%   D:F6<F2=A/F6,F4-F64F6c              #    K   t        | j                        dk  ry | j                  d d dk7  r,| j                  d| j                  t              E d {    y | j                  d   }|t        k(  rd}nM|t
        k(  rd}nA|t        k(  rd| j                  d   z   dz   }n"| j                  d	| t              E d {    y t        | j                        |k  ry | j                  d | | j                  |d  c}| _        |t        k(  r(t        j                  t        j                  |dd
       }nH|t
        k(  r(t        j                  t        j                  |dd
       }n|dd
 }|j                  dd      }t        j                  d|d
d        \  }||f| j                  j                   _        t%        j&                  | j                        | _        | j+                         E d {   }|rXt-        j.                  | j                  j0                  d       t-        j2                  | j                  j0                         y t-        j.                  | j                  j0                  d       | j                  rX| j(                  j5                  t7        j8                  | j                  j0                  | j                              E d {    | `y y 7 7 7 7 w)Nr[   r   s    zUnsupported SOCKS5 request: 
      r_   r\   zUnknown address type: asciireplacez!Hs
          s
           )r   rp   rw    SOCKS5_REP_COMMAND_NOT_SUPPORTEDSOCKS5_ATYP_IPV4_ADDRESSSOCKS5_ATYP_IPV6_ADDRESSSOCKS5_ATYP_DOMAINNAME%SOCKS5_REP_ADDRESS_TYPE_NOT_SUPPORTEDsocket	inet_ntopAF_INETAF_INET6r   structunpackr   r6   r7   r
   r   r   r<   r   rr   rP   rV   r   r	   rB   )r   atypmessage_lenmsghost
host_bytesportr;   s           r   r   zSocks5Proxy.state_connect   s    txx=188BQ<?*~~.txxl;0    xx{++#K--$K++$((1+-1K~~(/1V    txx=;& +.0FTX ++##FNNC"I>D--##FOOS2Y?DQrJ$$Wi8D--c"#h/ (,Tl# ??4<<8 **,,####%P  **4<<+>+>??####%P  xx++88''(;(;TXXF   H	 o : -sK   AK!KA'K!<K=D*K!'K(C&K!K	K!K!K!K!r   )ru   re   rv   z
int | Noner"   r#   r!   r?   )r%   r&   r'   rp   rA   rw   r   r	   r(   rB   rC   r   r   ry   r   r   r)   r*   r   rn   rn      s    C
 "&'' ' 
&	' FLL&--v/F/FG< H<& P :EE6D :Ar*   rn   ).
__future__r   r   r   sysabcr   collections.abcr   dataclassesr   	mitmproxyr   mitmproxy.proxyr   r	   r
   mitmproxy.proxy.commandsr   mitmproxy.proxy.mode_specsr   mitmproxy.proxy.utilsr   version_infotyping_extensionsr   typingLayerr   r-   r0   rF   rY   rs   r   r   r   r   r   r   SOCKS5_REP_HOST_UNREACHABLEr   r   rc   rk   rn   r)   r*   r   <module>r      s   "   
  $ !   $ " ! . 2 (g.#3 33 3u{{g 2@# @0@' @ +/ (-1 *&* #   " #'  (, %    Y  j" jr*   