
    hXD                         S r SSKrSSKrSSKJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr   " S	 S
\R                   5      r " S S5      r " S S\	R&                  5      r " S S\R*                  5      r " S S\R*                  5      rg)z_
Tests for L{twisted.protocol.socks}, an implementation of the SOCKSv4 and
SOCKSv4a protocols.
    N)addressdefer)DNSLookupError)socks)	iterbytes)proto_helpers)unittestc                   .    \ rS rSrSrSrS rS rS rSr	g)StringTCPTransport   FNc                     U R                   $ )N)peerselfs    ^/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/test/test_socks.pygetPeerStringTCPTransport.getPeer   s    yy    c                 2    [         R                  " SSS5      $ )NTCPz2.3.4.5*   )r   IPv4Addressr   s    r   getHostStringTCPTransport.getHost   s    ""5)R88r   c                     SU l         g )NTstringTCPTransport_closingr   s    r   loseConnection!StringTCPTransport.loseConnection   s
    *.'r   r   )
__name__
__module____qualname____firstlineno__r   r   r   r   r   __static_attributes__ r   r   r   r      s    !&D9/r   r   c                   $    \ rS rSrSrS rS rSrg)FakeResolverReactor"   zH
Bare-bones reactor with deterministic behavior for the resolve method.
c                     Xl         g)z
@type names: L{dict} containing L{str} keys and L{str} values.
@param names: A hostname to IP address mapping. The IP addresses are
    stringified dotted quads.
Nnames)r   r+   s     r   __init__FakeResolverReactor.__init__'   s	     
r   c           	           [         R                  " U R                  U   5      $ ! [         a4    [         R                  " [        SUR                  S5      -   5      5      s $ f = f)zA
Resolve a hostname by looking it up in the C{names} dictionary.
z"FakeResolverReactor couldn't find zutf-8)r   succeedr+   KeyErrorfailr   decode)r   hostnames     r   resolveFakeResolverReactor.resolve/   sX    	==H!566 	::88??7;SS 	s   "% ;A#"A#r*   N)r    r!   r"   r#   __doc__r,   r4   r$   r%   r   r   r'   r'   "   s    r   r'   c                   (    \ rS rSrSrSrS rS rSrg)SOCKSv4Driver=   Nc                     U" U6 n[        5       Ul        [        R                  " SX5      UR                  l        UR                  5         XPl        [        R                  " U5      $ )Nr   )	r   	transportr   r   r   connectionMadedriver_outgoingr   r/   )r   hostportklassargsprotos         r   connectClassSOCKSv4Driver.connectClassD   sO    t,.&225$E$}}U##r   c                 X    U" U6 nX@l         US:X  a  Sn[        R                  " SU45      $ )Nr     6.7.8.9)driver_listenr   r/   )r   r?   r@   rA   factorys        r   listenClassSOCKSv4Driver.listenClassM   s1    ,$19D}}i.//r   )rH   r=   )	r    r!   r"   r#   r=   rH   rC   rJ   r$   r%   r   r   r8   r8   =   s    O M$0r   r8   c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)ConnectTestsV   zN
Tests for SOCKS and SOCKSv4a connect requests using the L{SOCKSv4} protocol.
c                     [        5       U l        [        5       U R                  l        U R                  R	                  5         [        SS05      U R                  l        g Ns	   localhost	127.0.0.1r8   sockr   r;   r<   r'   reactorr   s    r   setUpConnectTests.setUp[   @    !O	02				  "/{0KL		r   c                     U R                   R                  nUb'  U R                  UR                  R                  S5        g g )Nz-Outgoing SOCKS connections need to be closed.)rS   r=   
assertTruer;   r   )r   outgoings     r   tearDownConnectTests.tearDowna   s:    99,,OO""==?  r   c           	         U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5       nU R                   R                  R                  5         U R                  U[        R                  " SSS	S5      [        R
                  " S5      -   5        U R                  U R                   R                  R                  5        U R                  U R                   R                  5        U R                   R                  S
5        U R                  U R                   R                  R                  R                  5       S
5        U R                   R                  R                  S5        U R                  U R                   R                  R                  5       S5        U R                   R                  S5        g )N!BBH      r(   1.2.3.4   fooBAR    r   Z      hello, world   hi therefake reason)rS   dataReceivedstructpacksocket	inet_atonr;   valueclearassertEqualassertFalser   assertIsNotNoner=   connectionLost)r   sents     r   test_simpleConnectTests.test_simplei   sq   		KK1b)y)* 	
 yy""((*		!!#&++faR063C3CI3NN	
 	,,GGHTYY667 			/22<<BBDoV 			!!..{;,,224kB		  /r   c           	         [         R                  " SSSS5      [        R                  " S5      -   S-   S-   n[	        U5       H  nU R
                  R                  U5        M      U R
                  R                  R                  5       nU R
                  R                  R                  5         U R                  U[         R                  " SSS	S5      [        R                  " S
5      -   5        U R                  U R
                  R                  R                  5        U R                  U R
                  R                  5        U R
                  R                  S5        U R                  U R
                  R                  R                  R                  5       S5        U R
                  R                  R                  S5        U R                  U R
                  R                  R                  5       S5        U R
                  R                  S5        g)E  
If the destination IP address has zeros for the first three octets and
non-zero for the fourth octet, the client is attempting a v4a
connection.  A hostname is specified after the user ID string and the
server connects to the address that hostname resolves to.

@see: U{http://en.wikipedia.org/wiki/SOCKS#SOCKS_4a_protocol}
r^   r_   r`   r(   0.0.0.1   fooBAZ 
   localhost r   rd   rQ   re   rf   rg   N)ri   rj   rk   rl   r   rS   rh   r;   rm   rn   ro   rp   r   rq   r=   rr   r   clientRequestbyters   s       r    test_socks4aSuccessfulResolution-ConnectTests.test_socks4aSuccessfulResolution   s    KK1b)y)*  	 m,DII""4( - yy""((*		!!# 	&++faR063C3CK3PP	
 	,,GGHTYY667 			/22<<BBDoV 			!!..{;,,224kB		  /r   c           	      :   [         R                  " SSSS5      [        R                  " S5      -   S-   S-   n[	        U5       H  nU R
                  R                  U5        M      U R
                  R                  R                  5       nU R                  U[         R                  " SSS	S5      [        R                  " S
5      -   5        U R                  U R
                  R                  R                  5        U R                  U R
                  R                  5        g)s
Failed hostname resolution on a SOCKSv4a packet results in a 91 error
response and the connection getting closed.
r^   r_   r`   r(   rx   ry      failinghost r   [   0.0.0.0Nri   rj   rk   rl   r   rS   rh   r;   rm   ro   rY   r   assertIsNoner=   r{   s       r   test_socks4aFailedResolution)ConnectTests.test_socks4aFailedResolution        KK1b)y)*  	 m,DII""4( - yy""((*&++faQ/&2B2B92MM	

 			++FFG$))334r   c           	      2   S U R                   l        U R                   R                  [        R                  " SSSS5      [
        R                  " S5      -   S-   S-   5        U R                  U R                   R                  R                  5       [        R                  " SS	S
S	5      [
        R                  " S5      -   5        U R                  U R                   R                  R                  5        U R                  U R                   R                  5        g )Nc                     gNr   r%   codeserverr?   users       r   <lambda>0ConnectTests.test_accessDenied.<locals>.<lambda>       qr   r^   r_   r`     10.2.3.4rb   rc   r   r   r   )rS   	authorizerh   ri   rj   rk   rl   ro   r;   rm   rY   r   r   r=   r   s    r   test_accessDeniedConnectTests.test_accessDenied   s    @				KK1d+z*+ 	
 	II%%'KK2q)F,<,<Y,GG	
 			++FFG$))334r   c                 B   U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5         U R                   R                  S5        U R                  U R                   R                  R                  R                  5       S5        U R                   R                  R                  R                  5         U R                   R                  R                  S	5        g 
Nr^   r_   r`   r(   ra   rb   rc   re   rg   )rS   rh   ri   rj   rk   rl   r;   rn   ro   r=   rm   r   rr   r   s    r   test_eofRemoteConnectTests.test_eofRemote   s    		KK1b)y)* 	
 			!!# 			/22<<BBDoV 			!!++::<		!!00?r   c                    U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5         U R                   R                  S5        U R                  U R                   R                  R                  R                  5       S5        U R                   R                  S	5        g r   )rS   rh   ri   rj   rk   rl   r;   rn   ro   r=   rm   rr   r   s    r   test_eofLocalConnectTests.test_eofLocal   s    		KK1b)y)* 	
 			!!# 			/22<<BBDoV 			  /r   rS   N)r    r!   r"   r#   r6   rU   r[   rt   r~   r   r   r   r   r$   r%   r   r   rM   rM   V   s2    M02,0\5:5@"0r   rM   c                   H    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rSrg)	BindTests   zK
Tests for SOCKS and SOCKSv4a bind requests using the L{SOCKSv4} protocol.
c                     [        5       U l        [        5       U R                  l        U R                  R	                  5         [        SS05      U R                  l        g rP   rR   r   s    r   rU   BindTests.setUp  rW   r   c           	         U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5       nU R                   R                  R                  5         U R                  U[        R                  " SSS	S
5      [        R
                  " S5      -   5        U R                  U R                   R                  R                  5        U R                  U R                   R                  5        U R                   R                  R                  S5      nU R                  U5        [        5       Ul        UR!                  5         U R                   R                  R                  5       nU R                   R                  R                  5         U R                  U[        R                  " SSS	S5      [        R
                  " S5      -   5        U R                  U R                   R                  R                  5        U R                   R                  S5        U R                  UR                  R                  5       S5        UR                  S5        U R                  U R                   R                  R                  5       S5        U R                   R#                  S5        g )Nr^   r_      r(   ra   rb   rc   r   rd   rF   rG   ra     r   re   rf   rg   )rS   rh   ri   rj   rk   rl   r;   rm   rn   ro   rp   r   rq   rH   buildProtocolr   r<   rr   r   rs   incomings      r   rt   BindTests.test_simple  s!   		KK1b)y)* 	
 yy""((*		!!#&++faT2V5E5Ei5PP	
 	,,GGHTYY445 99**889JKX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGH 			/++113_E 	k*,,224kB		  /r   c           	         [         R                  " SSSS5      [        R                  " S5      -   S-   S-   n[	        U5       H  nU R
                  R                  U5        M      U R
                  R                  R                  5       nU R
                  R                  R                  5         U R                  U[         R                  " SSS	S
5      [        R                  " S5      -   5        U R                  U R
                  R                  R                  5        U R                  U R
                  R                  5        U R
                  R                  R                  S5      nU R                  U5        [!        5       Ul        UR#                  5         U R
                  R                  R                  5       nU R
                  R                  R                  5         U R                  U[         R                  " SSS	S5      [        R                  " S5      -   5        U R%                  U R
                  R                  R                  S5        U R
                  R                  S5        U R                  UR                  R                  5       S5        UR                  S5        U R                  U R
                  R                  R                  5       S5        U R
                  R'                  S5        g)rw   r^   r_   r   r(   rx   ry   rz   r   rd   rF   rG   )rQ   r   r   Nrf   rg   )ri   rj   rk   rl   r   rS   rh   r;   rm   rn   ro   rp   r   rq   rH   r   r   r<   assertIsNotrr   )r   r|   r}   rs   r   s        r   test_socks4aBindTests.test_socks4a7  s=    KK1b)y)*  	 m,DII""4( - yy""((*		!!# 	&++faT2V5E5Ei5PP	
 	,,GGHTYY445 99**889LMX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGN 			{+++113[A 	k*,,224kB		  /r   c           	      :   [         R                  " SSSS5      [        R                  " S5      -   S-   S-   n[	        U5       H  nU R
                  R                  U5        M      U R
                  R                  R                  5       nU R                  U[         R                  " SSS	S5      [        R                  " S
5      -   5        U R                  U R
                  R                  R                  5        U R                  U R
                  R                  5        g)r   r^   r_   r   r(   rx   ry   r   r   r   r   Nr   r{   s       r   r   &BindTests.test_socks4aFailedResolutionr  r   r   c           	      2   S U R                   l        U R                   R                  [        R                  " SSSS5      [
        R                  " S5      -   S-   S-   5        U R                  U R                   R                  R                  5       [        R                  " SS	S
S	5      [
        R                  " S5      -   5        U R                  U R                   R                  R                  5        U R                  U R                   R                  5        g )Nc                     gr   r%   r   s       r   r   -BindTests.test_accessDenied.<locals>.<lambda>  r   r   r^   r_   r   r   r   rb   rc   r   r   r   )rS   r   rh   ri   rj   rk   rl   ro   r;   rm   rY   r   r   rH   r   s    r   r   BindTests.test_accessDenied  s    @				KK1d+z*+ 	
 	II%%'KK2q)F,<,<Y,GG	
 			++FFG$))112r   c           	      *   U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5       nU R                   R                  R                  5         U R                   R                  R                  S5      nU R                  U5        [        5       Ul        UR                  5         U R                   R                  R                  5       nU R                   R                  R                  5         U R                  U[        R                  " SS	S
S	5      [        R
                  " S5      -   5        U R                  U R                   R                  R                   5        U R                   R                  S5        U R                  UR                  R                  5       S5        UR                  R#                  5         UR%                  S5        g Nr^   r_   r   r(   ra   rb   rc   r   r   rd   r   re   rg   )rS   rh   ri   rj   rk   rl   r;   rm   rn   rH   r   rq   r   r<   ro   rp   r   r   rr   r   s      r   r   BindTests.test_eofRemote  s   		KK1b)y)* 	
 yy""((*		!!# 99**889JKX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGH 			/++113_E 	))+.r   c           	      
   U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5       nU R                   R                  R                  5         U R                   R                  R                  S5      nU R                  U5        [        5       Ul        UR                  5         U R                   R                  R                  5       nU R                   R                  R                  5         U R                  U[        R                  " SS	S
S	5      [        R
                  " S5      -   5        U R                  U R                   R                  R                   5        U R                   R                  S5        U R                  UR                  R                  5       S5        U R                   R#                  S5        g r   )rS   rh   ri   rj   rk   rl   r;   rm   rn   rH   r   rq   r   r<   ro   rp   r   rr   r   s      r   r   BindTests.test_eofLocal  s   		KK1b)y)* 	
 yy""((*		!!# 99**889JKX&/1! yy""((*		!!#&++faQ/&2B2B92MM	
 	,,GGH 			/++113_E 			  /r   c           	         U R                   R                  [        R                  " SSSS5      [        R
                  " S5      -   S-   S-   5        U R                   R                  R                  5       nU R                   R                  R                  5         U R                   R                  R                  S5      nU R                  U5        U R                   R                  R                  5       nU R                   R                  R                  5         U R                  U[        R                  " SS	S
S	5      [        R
                  " S5      -   5        U R                  U R                   R                  R                  5        g )Nr^   r_   r   r(   ra   rb   rc   )z1.6.6.6i  r   r   r   )rS   rh   ri   rj   rk   rl   r;   rm   rn   rH   r   r   ro   rY   r   r   s      r   test_badSourceBindTests.test_badSource  s&   		KK1b)y)* 	
 yy""((*		!!# 99**889IJ(# yy""((*		!!#&++faQ/&2B2B92MM	
 			++FFGr   r   N)r    r!   r"   r#   r6   rU   rt   r   r   r   r   r   r   r$   r%   r   r   r   r      s4    M%0N90v5:3/@0>Hr   r   )r6   rk   ri   twisted.internetr   r   twisted.internet.errorr   twisted.protocolsr   twisted.python.compatr   twisted.testr   twisted.trialr	   StringTransportr   r'   SOCKSv4r8   TestCaserM   r   r%   r   r   <module>r      s{   
   + 1 # + & "/66 / 60EMM 02e08$$ e0PtH!! tHr   