
    h                        S r SSKrSSKrSSKrSSKrSSKJrJrJr  SSK	J
r
   " S S\R                  5      r " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S\R                  5      rg)z)
Implementation of the SOCKSv4 protocol.
    N)deferprotocolreactor)logc                   2    \ rS rSrS rS rS rS rS rSr	g)	SOCKSv4Outgoing   c                     Xl         g Nsocksselfr   s     ^/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/protocols/socks.py__init__SOCKSv4Outgoing.__init__   s    
    c                     U R                   R                  5       nU R                  R                  SSUR                  UR
                  S9  X R                  l        g )NZ   r   )portip)	transportgetPeerr   	makeReplyr   host	otherConn)r   peers     r   connectionMadeSOCKSv4Outgoing.connectionMade   sA    ~~%%'

RtyyA#

r   c                 L    U R                   R                  R                  5         g r   r   r   loseConnectionr   reasons     r   connectionLostSOCKSv4Outgoing.connectionLost       

++-r   c                 :    U R                   R                  U5        g r   r   writer   datas     r   dataReceivedSOCKSv4Outgoing.dataReceived!       

r   c                 p    U R                   R                  X5        U R                  R                  U5        g r   r   r   r   r*   r+   s     r   r*   SOCKSv4Outgoing.write$   $    

t"T"r   r   N)
__name__
__module____qualname____firstlineno__r   r   r%   r-   r*   __static_attributes__ r   r   r   r      s    $
.#r   r   c                   ,    \ rS rSrS rS rS rS rSrg)SOCKSv4Incoming)   c                 0    Xl         X R                   l        g r   )r   r   r   s     r   r   SOCKSv4Incoming.__init__*   s    
#

r   c                 L    U R                   R                  R                  5         g r   r!   r#   s     r   r%   SOCKSv4Incoming.connectionLost.   r'   r   c                 :    U R                   R                  U5        g r   r)   r+   s     r   r-   SOCKSv4Incoming.dataReceived1   r/   r   c                 p    U R                   R                  X5        U R                  R                  U5        g r   r1   r+   s     r   r*   SOCKSv4Incoming.write4   r3   r   r   N)	r4   r5   r6   r7   r   r%   r-   r*   r8   r9   r   r   r;   r;   )   s    $.#r   r;   c                   f    \ rS rSrSrS\4S jrS rS rS r	S r
S	 rS
 rS rSS jrS rS rSrg)SOCKSv49   a  
An implementation of the SOCKSv4 protocol.

@type logging: L{str} or L{None}
@ivar logging: If not L{None}, the name of the logfile to which connection
    information will be written.

@type reactor: object providing L{twisted.internet.interfaces.IReactorTCP}
@ivar reactor: The reactor used to create connections.

@type buf: L{str}
@ivar buf: Part of a SOCKSv4 connection request.

@type otherConn: C{SOCKSv4Incoming}, C{SOCKSv4Outgoing} or L{None}
@ivar otherConn: Until the connection has been established, C{otherConn} is
    L{None}. After that, it is the proxy-to-destination protocol instance
    along which the client's connection is being forwarded.
Nc                     Xl         X l        g r   )loggingr   )r   rI   r   s      r   r   SOCKSv4.__init__M   s    r   c                      SU l         S U l        g )Nr   )bufr   )r   s    r   r   SOCKSv4.connectionMadeQ   s    r   c                    U R                   (       a  U R                   R                  U5        gU R                  U-   U l        U R                  nSU R                  SS ;   Ga*  U R                  SS U R                  SS so0l        [        R                  " SUSS 5      u  pEnU R                  R                  SS5      u  opl        USS S:X  a  USS S:w  a  SU R                  ;  a  X l        gU R                  R                  SS5      u  ol        U R                  R                  U5      n	U	R                  U R                  XtXV5        U	R                  U 4S	 j5        g[        R                  " USS 5      nU R                  XXEU5        gg)
zg
Called whenever data is received.

@type data: L{bytes}
@param data: Part or all of a SOCKSv4 packet.
N       !BBH         s      c                 $    UR                  S5      $ N[   r   resultr   s     r   <lambda>&SOCKSv4.dataReceived.<locals>.<lambda>p   s    t~~b7Ir   )r   r*   rL   structunpacksplitr   resolveaddCallback_dataReceived2
addErrbacksocket	inet_ntoa)
r   r,   completeBufferheadversioncoder   userserverds
             r   r-   SOCKSv4.dataReceivedU   sO    >>NN  &88d?dhhqrl"!XXbq\488AB<ND("(--Ra"AG4!XX^^GQ7ND(AayO+Qq	W0D
 $((*-H#'88>>'1#= LL((0d114$MIJ))$q)4gTB) #r   c                    US:X  d
   SU-  5       eU R                  XAXR5      (       d  U R                  S5        gUS:X  a-  U R                  X[        U 5      nUR	                  U 4S j5        OAUS:X  a-  U R                  S[        X5      nUR                  U 4S	 j5        O[        S
U 35      eU R                  S:X  d   S[        U R                  5      -  5       eg)a  
The second half of the SOCKS connection setup. For a SOCKSv4 packet this
is after the server address has been extracted from the header. For a
SOCKSv4a packet this is after the host name has been resolved.

@type server: L{str}
@param server: The IP address of the destination, represented as a
    dotted quad.

@type user: L{str}
@param user: The username associated with the connection.

@type version: L{int}
@param version: The SOCKS protocol version number.

@type code: L{int}
@param code: The command code. 1 means establish a TCP/IP stream
    connection, and 2 means establish a TCP/IP port binding.

@type port: L{int}
@param port: The port number associated with the connection.
rR   zBad version code: %srW   NrS   c                 $    UR                  S5      $ rV   rX   rY   s     r   r[   (SOCKSv4._dataReceived2.<locals>.<lambda>   s    4>>"3Er      r   c                 6    UR                  SSU S   U S   5      $ )Nr   r   rS   rX   )xr   s     r   r[   rp      s    t~~b!QqT1Q4/Pr   zBad Connect Code: r   z hmm, still stuff in buffer... %s)	authorizer   connectClassr   rc   listenClassSOCKSv4IncomingFactoryra   RuntimeErrorrL   repr)r   rk   rj   rh   ri   r   rl   s          r   rb   SOCKSv4._dataReceived2w   s    . !|=3g==|~~dD77NN219!!&FALLTEFQY  $:DIAMMPQ!3D6:;;xx3S BT$((^ SSr   c                 p    U R                   (       a%  U R                   R                  R                  5         g g r   )r   r   r"   r#   s     r   r%   SOCKSv4.connectionLost   s$    >>NN$$335 r   c                 R    [         R                  " SU< SU< SU< SU< S3	5        g)Nzcode z connection to :z (user z) authorizedrS   )r   msg)r   ri   rk   r   rj   s        r   rt   SOCKSv4.authorize   s!    VT4)	
 r   c                 X    [         R                  " [        U/UQ76 R                  X5      $ r   )r   ClientCreatorr   
connectTCP)r   r   r   klassargss        r   ru   SOCKSv4.connectClass   s%    %%gu<t<GGSSr   c                     [         R                  " X" U6 5      n[        R                  " UR	                  5       SS  5      $ )NrS   )r   	listenTCPr   succeedgetHost)r   r   r   r   servs        r   rv   SOCKSv4.listenClass   s4      ud|4}}T\\^AB/00r   c                     U R                   R                  [        R                  " SX!U5      [        R
                  " U5      -   5        US:w  a  U R                   R                  5         g g )NrQ   r   )r   r*   r]   packrd   	inet_atonr"   )r   replyrh   r   r   s        r   r   SOCKSv4.makeReply   sR    KK58H8H8LL	
 B;NN))+ r   c                 \    U R                  X5        U R                  R                  U5        g r   )r   r   r*   r+   s     r   r*   SOCKSv4.write   s     T"r   c           	      p   U R                   (       d  g U R                  R                  5       nU R                  R                  R                  5       n[	        U R                   S5      nUR                  S[        R                  " 5       UR                  UR                  X:H  =(       a    S=(       d    SUR                  UR                  4-  5        U(       a  US S USS  p&UR                  [        R                  " [        S U5      S5      S-   5        UR                  S[        U5      -
  S-  S-  5        U H?  n[        [        U5      5      S:  a  UR                  S	5        M.  UR                  U5        MA     UR                  S
5        U(       a  M  UR                  S
5        UR                  5         g )Naz%s	%s:%d %s %s:%d
<>   c                     S[        U 5      -  $ )Nz%02X)ord)rs   s    r   r[   SOCKSv4.log.<locals>.<lambda>   s    fs1vor       .
)rI   r   r   r   openr*   timectimer   r   stringjoinmaplenry   close)r   protor,   r   
their_peerfpcs           r   r   SOCKSv4.log   sG   ||~~%%'^^--557
s#	"

				-'C/C
	
 3BibctGGFKK$=q A3G#MNGGR#a&[A%+,tAw<!#GGCLGGAJ	 
 GGDM d 	
		r   )rL   rI   r   r   )r   r   z0.0.0.0)r4   r5   r6   r7   __doc__r   r   r   r-   rb   r%   rt   ru   rv   r   r*   r   r8   r9   r   r   rF   rF   9   sJ    &  $W  CD#TJ6T1,#r   rF   c                   $    \ rS rSrSrS rS rSrg)SOCKSv4Factory   zT
A factory for a SOCKSv4 proxy.

Constructor accepts one argument, a log file name.
c                     Xl         g r   rI   )r   r   s     r   r   SOCKSv4Factory.__init__   s    r   c                 6    [        U R                  [        5      $ r   )rF   rI   r   r   addrs     r   buildProtocolSOCKSv4Factory.buildProtocol   s    t||W--r   r   Nr4   r5   r6   r7   r   r   r   r8   r9   r   r   r   r      s    .r   r   c                   $    \ rS rSrSrS rS rSrg)rw      zB
A utility class for building protocols for incoming connections.
c                     Xl         X l        g r   )r   r   )r   r   r   s      r   r   SOCKSv4IncomingFactory.__init__   s    
r   c                    US   U R                   :X  a8  SU l         U R                  R                  SS5        [        U R                  5      $ U R                   S:X  a  g U R                  R                  SS5        SU l         g )Nr    r   rW   )r   r   r   r;   r   s     r   r   $SOCKSv4IncomingFactory.buildProtocol   sh    7dggDGJJ  Q'"4::..WW]JJ  Q'DGr   )r   r   Nr   r9   r   r   rw   rw      s    
r   rw   )r   rd   r   r]   r   twisted.internetr   r   r   twisted.pythonr   Protocolr   r;   rF   Factoryr   rw   r9   r   r   <module>r      s   
     6 5 #h'' #(#h'' # \h \~.X%% .X-- r   