Your IP : 216.73.216.61


Current Path : /opt/alt/python37/lib64/python3.7/site-packages/twisted/protocols/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib64/python3.7/site-packages/twisted/protocols/__pycache__/socks.cpython-37.pyc

B

:��]��@s�dZddlZddlZddlZddlZddlmZmZmZddl	m
Z
Gdd�dej�ZGdd�dej�Z
Gd	d
�d
ej�ZGdd�dej�ZGd
d�dej�ZdS)z)
Implementation of the SOCKSv4 protocol.
�N)�reactor�protocol�defer)�logc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�SOCKSv4OutgoingcCs
||_dS)N)�socks)�selfr�r	�J/opt/alt/python37/lib64/python3.7/site-packages/twisted/protocols/socks.py�__init__szSOCKSv4Outgoing.__init__cCs.|j��}|jjdd|j|jd�||j_dS)N�Zr)�port�ip)�	transport�getPeerr�	makeReplyr
�host�	otherConn)r�peerr	r	r
�connectionMades
zSOCKSv4Outgoing.connectionMadecCs|jj��dS)N)rr�loseConnection)r�reasonr	r	r
�connectionLostszSOCKSv4Outgoing.connectionLostcCs|j�|�dS)N)r�write)r�datar	r	r
�dataReceived#szSOCKSv4Outgoing.dataReceivedcCs|j�||�|j�|�dS)N)rrrr)rrr	r	r
r'szSOCKSv4Outgoing.writeN)�__name__�
__module__�__qualname__rrrrrr	r	r	r
rs
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�SOCKSv4IncomingcCs||_||j_dS)N)rr)rrr	r	r
r.szSOCKSv4Incoming.__init__cCs|jj��dS)N)rrr)rrr	r	r
r3szSOCKSv4Incoming.connectionLostcCs|j�|�dS)N)rr)rrr	r	r
r7szSOCKSv4Incoming.dataReceivedcCs|j�||�|j�|�dS)N)rrrr)rrr	r	r
r;szSOCKSv4Incoming.writeN)rrrrrrrr	r	r	r
r-src@speZdZdZdefdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zddd�Z
dd�Zdd�ZdS)�SOCKSv4a�
    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.
    NcCs||_||_dS)N)�loggingr)rr!rr	r	r
rTszSOCKSv4.__init__cCsd|_d|_dS)N�)�bufr)rr	r	r
rYszSOCKSv4.connectionMadec
Cs4|jr|j�|�dS|j||_|j}d|jdd�k�r0|jdd�|jdd�}|_t�d|dd��\}}}|j�dd�\}|_|dd�dk�r|dd�dk�rd|jkr�||_dS|j�dd�\}|_|j�|�}	|	�|j	||||�|	�
|fd	d
��dSt�|dd��}|�	|||||�dS)z�
        Called whenever data is received.

        @type data: L{bytes}
        @param data: Part or all of a SOCKSv4 packet.
        N��z!BBH���scSs
|�d�S)N�[)r)�resultrr	r	r
�<lambda>zr"z&SOCKSv4.dataReceived.<locals>.<lambda>)
rrr#�struct�unpack�splitr�resolve�addCallback�_dataReceived2�
addErrback�socket�	inet_ntoa)
rrZcompleteBuffer�head�version�coder
�user�server�dr	r	r
r^s* $


zSOCKSv4.dataReceivedcCs�|dkstd|��|�||||�s2|�d�dS|dkr^|�||t|�}|�|fdd��n:|dkr�|�d	t||�}|�|fd
d��nt	d|f��|j
dks�td
t|j
���dS)a3
        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 comand 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.
        r&zBad version code: %sr)Nr'cSs
|�d�S)Nr))r)r*rr	r	r
r+�r"z(SOCKSv4._dataReceived2.<locals>.<lambda>�rcSs|�dd|d|d�S)Nrrr')r)�xrr	r	r
r+�szBad Connect Code: %sr"z hmm, still stuff in buffer... %s)�AssertionError�	authorizer�connectClassrr2�listenClass�SOCKSv4IncomingFactoryr0�RuntimeErrorr#�repr)rr9r8r6r7r
r:r	r	r
r1�s
zSOCKSv4._dataReceived2cCs|jr|jj��dS)N)rrr)rrr	r	r
r�szSOCKSv4.connectionLostcCst�d||||f�dS)Nz0code %s connection to %s:%s (user %s) authorizedr')r�msg)rr7r9r
r8r	r	r
r>�szSOCKSv4.authorizecGstjt|f|���||�S)N)rZ
ClientCreatorrZ
connectTCP)rrr
�klass�argsr	r	r
r?�szSOCKSv4.connectClasscGs&t�|||��}t�|��dd��S)Nr')rZ	listenTCPrZsucceedZgetHost)rr
rErFZservr	r	r
r@�szSOCKSv4.listenClassr�0.0.0.0cCs8|j�t�d|||�t�|��|dkr4|j��dS)Nz!BBHr)rrr,�packr3�	inet_atonr)rZreplyr6r
rr	r	r
r�s"zSOCKSv4.makeReplycCs|�||�|j�|�dS)N)rrr)rrr	r	r
r�sz
SOCKSv4.writec	Cs|js
dS|j��}|jj��}t|jd�}|�dt��|j|j	||krLdpNd|j|j	f�x�|r�|dd�|dd�}}|�t
�tdd�|�d�d�|�dt
|�d	d�x2|D]*}t
t|��d	kr�|�d
�q�|�|�q�W|�d�q`W|�d�|��dS)N�az%s	%s:%d %s %s:%d
�<�>�cSsdt|�S)Nz%02X)�ord)r<r	r	r
r+�r"zSOCKSv4.log.<locals>.<lambda>� ��.�
)r!rrr�openr�time�ctimerr
�string�join�map�lenrC�close)r�protorrZ
their_peer�f�p�cr	r	r
r�s(
 

zSOCKSv4.log)rrrG)rrr�__doc__rrrrr1rr>r?r@rrrr	r	r	r
r As$(
r c@s eZdZdZdd�Zdd�ZdS)�SOCKSv4Factoryz`
    A factory for a SOCKSv4 proxy.

    Constructor accepts one argument, a log file name.
    cCs
||_dS)N)r!)rrr	r	r
r�szSOCKSv4Factory.__init__cCst|jt�S)N)r r!r)r�addrr	r	r
�
buildProtocol�szSOCKSv4Factory.buildProtocolN)rrrr_rrbr	r	r	r
r`�sr`c@s eZdZdZdd�Zdd�ZdS)rAzJ
    A utility class for building protocols for incoming connections.
    cCs||_||_dS)N)rr)rrrr	r	r
r�szSOCKSv4IncomingFactory.__init__cCsV|d|jkr,d|_|j�dd�t|j�S|jdkr:dS|j�dd�d|_dSdS)Nr�rr))rrrr)rrar	r	r
rb�s

z$SOCKSv4IncomingFactory.buildProtocolN)rrrr_rrbr	r	r	r
rA�srA)r_r,rVr3rTZtwisted.internetrrrZtwisted.pythonrZProtocolrrr ZFactoryr`rAr	r	r	r
�<module>s