o
    ¼>hXD  ć                   @   sŗ   d Z ddlZddlZddlmZ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 G d	d
 d
ejZG dd dZG dd de	jZG dd dejZG dd dejZdS )z_
Tests for L{twisted.protocol.socks}, an implementation of the SOCKSv4 and
SOCKSv4a protocols.
é    N)ŚaddressŚdefer)ŚDNSLookupError)Śsocks)Ś	iterbytes)Śproto_helpers)Śunittestc                   @   s,   e Zd ZdZdZdd Zdd Zdd ZdS )	ŚStringTCPTransportFNc                 C   s   | j S )N)Śpeer©Śself© r   św/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/test/test_socks.pyŚgetPeer   s   zStringTCPTransport.getPeerc                 C   s   t  ddd”S )NŚTCPz2.3.4.5é*   )r   ŚIPv4Addressr   r   r   r   ŚgetHost   s   zStringTCPTransport.getHostc                 C   s
   d| _ d S )NT)ŚstringTCPTransport_closingr   r   r   r   ŚloseConnection   s   
z!StringTCPTransport.loseConnection)Ś__name__Ś
__module__Ś__qualname__r   r
   r   r   r   r   r   r   r   r	      s    r	   c                   @   s    e Zd ZdZdd Zdd ZdS )ŚFakeResolverReactorzP
    Bare-bones reactor with deterministic behavior for the resolve method.
    c                 C   s
   || _ dS )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   r   r   r   Ś__init__'   s   
zFakeResolverReactor.__init__c              
   C   s>   z	t  | j| ”W S  ty   t  td| d” ” Y S w )zQ
        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   Śhostnamer   r   r   Śresolve/   s   ’’’zFakeResolverReactor.resolveN)r   r   r   Ś__doc__r   r!   r   r   r   r   r   "   s    r   c                   @   s$   e Zd ZdZdZdd Zdd ZdS )ŚSOCKSv4DriverNc                 G   s:   || }t  |_t d||”|j_| ”  || _t |”S )Nr   )	r	   Ś	transportr   r   r
   ŚconnectionMadeŚdriver_outgoingr   r   )r   ŚhostŚportŚklassŚargsŚprotor   r   r   ŚconnectClassD   s   
zSOCKSv4Driver.connectClassc                 G   s(   || }|| _ |dkrd}t d|f”S )Nr   éŅ  ś6.7.8.9)Śdriver_listenr   r   )r   r(   r)   r*   Śfactoryr   r   r   ŚlistenClassM   s
   zSOCKSv4Driver.listenClass)r   r   r   r&   r/   r,   r1   r   r   r   r   r#   =   s
    	r#   c                   @   óP   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )ŚConnectTestszV
    Tests for SOCKS and SOCKSv4a connect requests using the L{SOCKSv4} protocol.
    c                 C   ó0   t  | _t | j_| j ”  tddi| j_d S ©Ns	   localhostś	127.0.0.1©r#   Śsockr	   r$   r%   r   Śreactorr   r   r   r   ŚsetUp[   ó   

zConnectTests.setUpc                 C   s(   | j j}|d ur|  |jjd” d S d S )Nz-Outgoing SOCKS connections need to be closed.)r8   r&   Ś
assertTruer$   r   )r   Śoutgoingr   r   r   ŚtearDowna   s   ž’zConnectTests.tearDownc              	   C   sÖ   | j  t dddd”t d” d d ” | j j ” }| j j ”  |  	|t ddd	d”t d” ” |  
| j jj” |  | j j” | j  d
” |  	| j jj ” d
” | j j d” |  	| j j ” d” | j  d” d S )Nś!BBHé   é   é"   ś1.2.3.4ó   fooBARó    r   éZ   ó   hello, worldó   hi thereśfake reason)r8   ŚdataReceivedŚstructŚpackŚsocketŚ	inet_atonr$   ŚvalueŚclearŚassertEqualŚassertFalser   ŚassertIsNotNoner&   ŚconnectionLost)r   Śsentr   r   r   Śtest_simplei   s*   ’žż’’zConnectTests.test_simplec              	   C   sč   t  dddd”t d” d d }t|D ]}| j |” q| jj ” }| jj 	”  |  
|t  ddd	d”t d
” ” |  | jjj” |  | jj” | j d” |  
| jjj ” d” | jj d” |  
| jj ” d” | j d” dS )įu  
        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@   rA   rB   ś0.0.0.1ó   fooBAZ ó
   localhost r   rF   r6   rG   rH   rI   N)rK   rL   rM   rN   r   r8   rJ   r$   rO   rP   rQ   rR   r   rS   r&   rT   ©r   ŚclientRequestŚbyterU   r   r   r   Ś test_socks4aSuccessfulResolution   s,   ’žż’
’z-ConnectTests.test_socks4aSuccessfulResolutionc              	   C   ó   t  dddd”t d” d d }t|D ]}| j |” q| jj ” }|  	|t  ddd	d”t d
” ” |  
| jjj” |  | jj” dS )ś
        Failed hostname resolution on a SOCKSv4a packet results in a 91 error
        response and the connection getting closed.
        r?   r@   rA   rB   rX   rY   ó   failinghost r   é[   ś0.0.0.0N©rK   rL   rM   rN   r   r8   rJ   r$   rO   rQ   r<   r   ŚassertIsNoner&   r[   r   r   r   Śtest_socks4aFailedResolution°   ó    ’žż’
’z)ConnectTests.test_socks4aFailedResolutionc              	   C   ó   dd | j _| j  t dddd”t d” d d	 ” |  | j j 	” t dd
dd
”t d” ” |  
| j jj” |  | j j” d S )Nc                 S   ó   dS ©Nr   r   ©ŚcodeŚserverr(   Śuserr   r   r   Ś<lambda>Ī   ó    z0ConnectTests.test_accessDenied.<locals>.<lambda>r?   r@   rA   é  ś10.2.3.4rD   rE   r   rb   rc   )r8   Ś	authorizerJ   rK   rL   rM   rN   rQ   r$   rO   r<   r   re   r&   r   r   r   r   Śtest_accessDeniedĶ   ó    ’žż’
žzConnectTests.test_accessDeniedc                 C   sx   | j  t dddd”t d” d d ” | j j ”  | j  d” |  | j j	j 
” d” | j j	j ”  | j j	 d	” d S ©
Nr?   r@   rA   rB   rC   rD   rE   rG   rI   )r8   rJ   rK   rL   rM   rN   r$   rP   rQ   r&   rO   r   rT   r   r   r   r   Śtest_eofRemoteÜ   s   ’žż’zConnectTests.test_eofRemotec                 C   sh   | j  t dddd”t d” d d ” | j j ”  | j  d” |  | j j	j 
” d” | j  d	” d S rv   )r8   rJ   rK   rL   rM   rN   r$   rP   rQ   r&   rO   rT   r   r   r   r   Śtest_eofLocalķ   s   ’žż’zConnectTests.test_eofLocalN)r   r   r   r"   r:   r>   rV   r^   rf   rt   rw   rx   r   r   r   r   r3   V   s    .r3   c                   @   r2   )Ś	BindTestszS
    Tests for SOCKS and SOCKSv4a bind requests using the L{SOCKSv4} protocol.
    c                 C   r4   r5   r7   r   r   r   r   r:     r;   zBindTests.setUpc              	   C   s@  | j  t dddd”t d” d d ” | j j ” }| j j ”  |  	|t ddd	d
”t d” ” |  
| j jj” |  | j j” | j j d”}|  |” t |_| ”  | j j ” }| j j ”  |  	|t ddd	d”t d” ” |  
| j jj” | j  d” |  	|j ” d” | d” |  	| j j ” d” | j  d” d S )Nr?   r@   é   rB   rC   rD   rE   r   rF   r-   r.   ©rC   éį  rc   rG   rH   rI   )r8   rJ   rK   rL   rM   rN   r$   rO   rP   rQ   rR   r   rS   r/   ŚbuildProtocolr	   r%   rT   ©r   rU   Śincomingr   r   r   rV     s>   ’žż’’
’
zBindTests.test_simplec              	   C   sT  t  dddd”t d” d d }t|D ]}| j |” q| jj ” }| jj 	”  |  
|t  ddd	d
”t d” ” |  | jjj” |  | jj” | jj d”}|  |” t |_| ”  | jj ” }| jj 	”  |  
|t  ddd	d”t d” ” |  | jjjd” | j d” |  
|j ” d” | d” |  
| jj ” d” | j d” dS )rW   r?   r@   rz   rB   rX   rY   rZ   r   rF   r-   r.   )r6   r|   rc   NrH   rI   )rK   rL   rM   rN   r   r8   rJ   r$   rO   rP   rQ   rR   r   rS   r/   r}   r	   r%   ŚassertIsNotrT   )r   r\   r]   rU   r   r   r   r   Śtest_socks4a7  s@   ’žż’
’
’
zBindTests.test_socks4ac              	   C   r_   )r`   r?   r@   rz   rB   rX   rY   ra   r   rb   rc   Nrd   r[   r   r   r   rf   r  rg   z&BindTests.test_socks4aFailedResolutionc              	   C   rh   )Nc                 S   ri   rj   r   rk   r   r   r   ro     rp   z-BindTests.test_accessDenied.<locals>.<lambda>r?   r@   rz   rq   rr   rD   rE   r   rb   rc   )r8   rs   rJ   rK   rL   rM   rN   rQ   r$   rO   r<   r   re   r/   r   r   r   r   rt     ru   zBindTests.test_accessDeniedc              	   C   sź   | j  t dddd”t d” d d ” | j j ” }| j j ”  | j j	 
d”}|  |” t |_| ”  | j j ” }| j j ”  |  |t dd	d
d	”t d” ” |  | j jj” | j  d” |  |j ” d” |j ”  | d” d S ©Nr?   r@   rz   rB   rC   rD   rE   r{   r   rF   rc   rG   rI   )r8   rJ   rK   rL   rM   rN   r$   rO   rP   r/   r}   rS   r	   r%   rQ   rR   r   r   rT   r~   r   r   r   rw     s2   ’žż’
’
zBindTests.test_eofRemotec              	   C   sā   | j  t dddd”t d” d d ” | j j ” }| j j ”  | j j	 
d”}|  |” t |_| ”  | j j ” }| j j ”  |  |t dd	d
d	”t d” ” |  | j jj” | j  d” |  |j ” d” | j  d” d S r   )r8   rJ   rK   rL   rM   rN   r$   rO   rP   r/   r}   rS   r	   r%   rQ   rR   r   rT   r~   r   r   r   rx   ¾  s0   ’žż’
’zBindTests.test_eofLocalc              	   C   sØ   | j  t dddd”t d” d d ” | j j ” }| j j ”  | j j	 
d”}|  |” | j j ” }| j j ”  |  |t dd	d
d	”t d” ” |  | j jj” d S )Nr?   r@   rz   rB   rC   rD   rE   )z1.6.6.6i  r   rb   rc   )r8   rJ   rK   rL   rM   rN   r$   rO   rP   r/   r}   re   rQ   r<   r   r~   r   r   r   Śtest_badSourceŻ  s&   ’žż’
’zBindTests.test_badSourceN)r   r   r   r"   r:   rV   r   rf   rt   rw   rx   r   r   r   r   r   ry   ž   s    '; ry   )r"   rM   rK   Śtwisted.internetr   r   Śtwisted.internet.errorr   Śtwisted.protocolsr   Śtwisted.python.compatr   Śtwisted.testr   Śtwisted.trialr   ŚStringTransportr	   r   ŚSOCKSv4r#   ŚTestCaser3   ry   r   r   r   r   Ś<module>   s    )