§
    Ètºfù  ã                   ó  — d Z ddlZddlZddlZddlZddlmZmZmZ ddl	m
Z
  G d„ dej        ¦  «        Z G d„ dej        ¦  «        Z G d	„ d
ej        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        ZdS )z)
Implementation of the SOCKSv4 protocol.
é    N)ÚdeferÚprotocolÚreactor)Úlogc                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSOCKSv4Outgoingc                 ó   — || _         d S ©N)Úsocks©Úselfr   s     úV/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/protocols/socks.pyÚ__init__zSOCKSv4Outgoing.__init__   s   € ØˆŒ
ˆ
ˆ
ó    c                 ó    — | j                              ¦   «         }| j                             dd|j        |j        ¬¦  «         | | j        _        d S )NéZ   r   )ÚportÚip)Ú	transportÚgetPeerr   Ú	makeReplyr   ÚhostÚ	otherConn)r   Úpeers     r   ÚconnectionMadezSOCKSv4Outgoing.connectionMade   sH   € ØŒ~×%Ò%Ñ'Ô'ˆØŒ
×Ò˜R ¨¬°t´yÐÑAÔAÐAØ#ˆŒ
ÔÐÐr   c                 óB   — | j         j                             ¦   «          d S r
   ©r   r   ÚloseConnection©r   Úreasons     r   ÚconnectionLostzSOCKSv4Outgoing.connectionLost   ó   € ØŒ
Ô×+Ò+Ñ-Ô-Ð-Ð-Ð-r   c                 ó:   — | j                              |¦  «         d S r
   ©r   Úwrite©r   Údatas     r   ÚdataReceivedzSOCKSv4Outgoing.dataReceived!   ó   € ØŒ
×Ò˜ÑÔÐÐÐr   c                 óp   — | j                              | |¦  «         | j                             |¦  «         d S r
   ©r   r   r   r%   r&   s     r   r%   zSOCKSv4Outgoing.write$   ó4   € ØŒ
�Š�t˜TÑ"Ô"Ð"ØŒ×Ò˜TÑ"Ô"Ð"Ð"Ð"r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r(   r%   © r   r   r   r      s_   € € € € € ðð ð ð$ð $ð $ð
.ð .ð .ðð ð ð#ð #ð #ð #ð #r   r   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚSOCKSv4Incomingc                 ó,   — || _         | | j         _        d S r
   )r   r   r   s     r   r   zSOCKSv4Incoming.__init__*   s   € ØˆŒ
Ø#ˆŒ
ÔÐÐr   c                 óB   — | j         j                             ¦   «          d S r
   r   r   s     r   r!   zSOCKSv4Incoming.connectionLost.   r"   r   c                 ó:   — | j                              |¦  «         d S r
   r$   r&   s     r   r(   zSOCKSv4Incoming.dataReceived1   r)   r   c                 óp   — | j                              | |¦  «         | j                             |¦  «         d S r
   r+   r&   s     r   r%   zSOCKSv4Incoming.write4   r,   r   N)r-   r.   r/   r   r!   r(   r%   r0   r   r   r2   r2   )   sP   € € € € € ð$ð $ð $ð.ð .ð .ðð ð ð#ð #ð #ð #ð #r   r2   c                   ó\   — e Zd ZdZdefd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zdd„Zd„ Zd„ ZdS )Ú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.
    Nc                 ó"   — || _         || _        d S r
   )Úloggingr   )r   r:   r   s      r   r   zSOCKSv4.__init__M   s   € ØˆŒØˆŒˆˆr   c                 ó"   — d| _         d | _        d S )Nr   )Úbufr   )r   s    r   r   zSOCKSv4.connectionMadeQ   s   € ØˆŒØˆŒˆˆr   c                 ó   — | j         r| j                              |¦  «         dS | j        |z   | _        | j        }d| j        dd…         v �rB| j        dd…         | j        dd…         c}| _        t          j        d|dd…         ¦  «        \  }}}| j                             dd¦  «        \  }| _        |dd…         dk    r•|dd…         dk    r‡d| j        vr	|| _        dS | j                             dd¦  «        \  }| _        | j                             |¦  «        }	|	                     | j	        ||||¦  «         |	 
                    | fd	„¦  «         dS t          j        |dd…         ¦  «        }|  	                    |||||¦  «         dS dS )
z‡
        Called whenever data is received.

        @type data: L{bytes}
        @param data: Part or all of a SOCKSv4 packet.
        Nó    é   ú!BBHé   é   é   s      c                 ó,   — |                      d¦  «        S ©Né[   ©r   ©Úresultr   s     r   ú<lambda>z&SOCKSv4.dataReceived.<locals>.<lambda>p   s   € °t·~²~ÀbÑ7IÔ7I€ r   )r   r%   r<   ÚstructÚunpackÚsplitr   ÚresolveÚaddCallbackÚ_dataReceived2Ú
addErrbackÚsocketÚ	inet_ntoa)
r   r'   ÚcompleteBufferÚheadÚversionÚcoder   ÚuserÚserverÚds
             r   r(   zSOCKSv4.dataReceivedU   sž  € ð Œ>ð 	ØŒN× Ò  Ñ&Ô&Ð&ØˆFØ”8˜d‘?ˆŒØœˆØ�d”h˜q˜r˜r”lÐ"Ñ"Ø!œX b q bœ\¨4¬8°A°B°B¬<ˆNˆD�$”(Ý"(¤-°¸¸R¸a¸R¼Ñ"AÔ"AÑˆG�T˜4Ø!œXŸ^š^¨G°QÑ7Ô7‰NˆD�$”(Ø�A�a�CŒy˜OÒ+Ð+°°Q°q°S´	¸WÒ0DÐ0Dð
  $¤(Ð*Ð*Ø-�D”HØ�FØ#'¤8§>¢>°'¸1Ñ#=Ô#=Ñ �˜œØ”L×(Ò(¨Ñ0Ô0�Ø—’˜dÔ1°4¸À$ÈÑMÔMÐMØ—’°ÐIÐIÐIÑJÔJÐJØ�åÔ)¨$¨q°¨s¬)Ñ4Ô4�à×Ò ¨¨g°t¸TÑBÔBÐBÐBÐBð) #Ð"r   c                 óò  — |dk    sJ d|z  ¦   «         ‚|                       ||||¦  «        s|                      d¦  «         dS |dk    r6|                      ||t          | ¦  «        }|                     | fd„¦  «         nN|dk    r6|                      dt          | |¦  «        }|                     | fd	„¦  «         nt          d
|› �¦  «        ‚| j	        dk    sJ dt          | j	        ¦  «        z  ¦   «         ‚dS )a4  
        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.
        rA   zBad version code: %srF   NrB   c                 ó,   — |                      d¦  «        S rE   rG   rH   s     r   rJ   z(SOCKSv4._dataReceived2.<locals>.<lambda>”   s   € °4·>²>À"Ñ3EÔ3E€ r   é   r   c                 óJ   — |                      dd| d         | d         ¦  «        S )Nr   r   rB   rG   )Úxr   s     r   rJ   z(SOCKSv4._dataReceived2.<locals>.<lambda>—   s    € ¨t¯~ª~¸bÀ!ÀQÀqÄTÈ1ÈQÌ4Ñ/PÔ/P€ r   zBad Connect Code: r   z hmm, still stuff in buffer... %s)Ú	authorizer   ÚconnectClassr   rQ   ÚlistenClassÚSOCKSv4IncomingFactoryrO   ÚRuntimeErrorr<   Úrepr)r   rY   rX   rV   rW   r   rZ   s          r   rP   zSOCKSv4._dataReceived2w   s  € ð. ˜!Š|ˆ|ˆ|Ð3°gÑ=‰|Œ|ˆ|Ø�~Š~˜d F¨D°$Ñ7Ô7ð 	Ø�NŠN˜2ÑÔÐØˆFØ�1Š9ˆ9Ø×!Ò! &¨$µÀÑFÔFˆAØ�LŠL¨TÐEÐEÐEÑFÔFÐFÐFØ�QŠYˆYØ× Ò  Õ$:¸DÀ&ÑIÔIˆAØ�MŠM¨ÐPÐPÐPÑQÔQÐQÐQåÐ:°DÐ:Ð:Ñ;Ô;Ð;ØŒx˜3ŠˆˆÐ BÅTÈ$Ì(Á^Ä^Ñ S‰Œˆˆˆr   c                 óT   — | j         r | j         j                             ¦   «          d S d S r
   )r   r   r   r   s     r   r!   zSOCKSv4.connectionLostœ   s3   € ØŒ>ð 	6ØŒNÔ$×3Ò3Ñ5Ô5Ð5Ð5Ð5ð	6ð 	6r   c                 óH   — t          j        d|›d|›d|›d|›d�	¦  «         dS )Nzcode z connection to ú:z (user z) authorizedrB   )r   Úmsg)r   rW   rY   r   rX   s        r   r`   zSOCKSv4.authorize    s=   € ÝŒˆàˆtˆt�V�V�V˜T˜T˜T 4 4 4ð)ñ	
ô 	
ð 	
ð ˆqr   c                 óZ   — t          j        t          |g|¢R Ž                      ||¦  «        S r
   )r   ÚClientCreatorr   Ú
connectTCP)r   r   r   ÚklassÚargss        r   ra   zSOCKSv4.connectClass§   s-   € ÝÔ%¥g¨uÐ<°tÐ<Ð<Ð<×GÒGÈÈdÑSÔSÐSr   c                 óŽ   — t          j        | ||Ž ¦  «        }t          j        |                     ¦   «         dd …         ¦  «        S )NrB   )r   Ú	listenTCPr   ÚsucceedÚgetHost)r   r   rm   rn   Úservs        r   rb   zSOCKSv4.listenClassª   s;   € ÝÔ   u u¨d |Ñ4Ô4ˆÝŒ}˜TŸ\š\™^œ^¨A¨B¨BÔ/Ñ0Ô0Ð0r   r   ú0.0.0.0c                 óÐ   — | j                              t          j        d|||¦  «        t	          j        |¦  «        z   ¦  «         |dk    r| j                              ¦   «          d S d S )Nr@   r   )r   r%   rK   ÚpackrR   Ú	inet_atonr   )r   ÚreplyrV   r   r   s        r   r   zSOCKSv4.makeReply®   sk   € ØŒ×ÒÝŒK˜ ¨°Ñ5Ô5½Ô8HÈÑ8LÔ8LÑLñ	
ô 	
ð 	
ð �BŠ;ˆ;ØŒN×)Ò)Ñ+Ô+Ð+Ð+Ð+ð ˆ;r   c                 óf   — |                       | |¦  «         | j                             |¦  «         d S r
   )r   r   r%   r&   s     r   r%   zSOCKSv4.writeµ   s2   € Ø�Š��tÑÔÐØŒ×Ò˜TÑ"Ô"Ð"Ð"Ð"r   c           	      ó\  — | j         sd S | j                             ¦   «         }| j        j                             ¦   «         }t	          | j         d¦  «        }|                     dt          j        ¦   «         |j        |j	        || k    rdpd|j        |j	        fz  ¦  «         |rà|d d…         |dd …         }}|                     t          j        t          d„ |¦  «        d¦  «        dz   ¦  «         |                     dt          |¦  «        z
  dz  dz  ¦  «         |D ]M}t          t          |¦  «        ¦  «        dk    r|                     d	¦  «         Œ8|                     |¦  «         ŒN|                     d
¦  «         |°à|                     d
¦  «         |                     ¦   «          d S )NÚaz%s	%s:%d %s %s:%d
ú<ú>é   c                 ó&   — dt          | ¦  «        z  S )Nz%02X)Úord)r_   s    r   rJ   zSOCKSv4.log.<locals>.<lambda>Ì   s   € ¨fµs¸1±v´v©o€ r   ú é   ú.ú
)r:   r   r   r   Úopenr%   ÚtimeÚctimer   r   ÚstringÚjoinÚmapÚlenre   Úclose)r   Úprotor'   r   Ú
their_peerÚfÚpÚcs           r   r   zSOCKSv4.log¹   s™  € ØŒ|ð 	ØˆFØŒ~×%Ò%Ñ'Ô'ˆØ”^Ô-×5Ò5Ñ7Ô7ˆ
Ý�”˜sÑ#Ô#ˆØ	�ŠØ"å”
‘”Ø”	Ø”	Ø˜4’-Ð' CÐ/¨CØ”Ø”ðññ
	
ô 
	
ð 
	
ð ð 		Ø˜3˜B˜3”i  b c c¤ˆtˆAØ�GŠG•F”K¥Ð$=Ð$=¸qÑ AÔ AÀ3ÑGÔGÈ#ÑMÑNÔNÐNØ�GŠG�R�#˜a™&œ&‘[ AÑ%¨Ñ+Ñ,Ô,Ð,Øð ð �Ý•t˜A‘w”w‘<”< !Ò#Ð#Ø—G’G˜C‘L”L�L�Là—G’G˜A‘J”J�J�JØ�GŠG�D‰MŒMˆMð ð 		ð 	
�Š�‰ŒˆØ	�Š‰	Œ	ˆ	ˆ	ˆ	r   )r   r   rt   )r-   r.   r/   Ú__doc__r   r   r   r(   rP   r!   r`   ra   rb   r   r%   r   r0   r   r   r8   r8   9   sß   € € € € € ðð ð&  $¨Wð ð ð ð ðð ð ð Cð  Cð  CðD#Tð #Tð #TðJ6ð 6ð 6ðð ð ðTð Tð Tð1ð 1ð 1ð,ð ,ð ,ð ,ð#ð #ð #ðð ð ð ð r   r8   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSOCKSv4Factoryz`
    A factory for a SOCKSv4 proxy.

    Constructor accepts one argument, a log file name.
    c                 ó   — || _         d S r
   )r:   )r   r   s     r   r   zSOCKSv4Factory.__init__ß   s   € ØˆŒˆˆr   c                 ó6   — t          | j        t          ¦  «        S r
   )r8   r:   r   ©r   Úaddrs     r   ÚbuildProtocolzSOCKSv4Factory.buildProtocolâ   s   € Ý�t”|¥WÑ-Ô-Ð-r   N©r-   r.   r/   r’   r   r™   r0   r   r   r”   r”   Ø   s<   € € € € € ðð ðð ð ð.ð .ð .ð .ð .r   r”   c                   ó   — e Zd ZdZd„ Zd„ ZdS )rc   zJ
    A utility class for building protocols for incoming connections.
    c                 ó"   — || _         || _        d S r
   )r   r   )r   r   r   s      r   r   zSOCKSv4IncomingFactory.__init__ë   s   € ØˆŒ
ØˆŒˆˆr   c                 óò   — |d         | j         k    r6d| _         | j                             dd¦  «         t          | j        ¦  «        S | j         dk    rd S | j                             dd¦  «         d| _         d S )Nr   Ú r   rF   )r   r   r   r2   r—   s     r   r™   z$SOCKSv4IncomingFactory.buildProtocolï   sv   € Ø�Œ7�d”gÒÐØˆDŒGØŒJ× Ò   QÑ'Ô'Ð'Ý" 4¤:Ñ.Ô.Ð.ØŒW˜Š]ˆ]Ø�4àŒJ× Ò   QÑ'Ô'Ð'ØˆDŒGØ�4r   Nrš   r0   r   r   rc   rc   æ   s<   € € € € € ðð ðð ð ð
ð 
ð 
ð 
ð 
r   rc   )r’   rR   rˆ   rK   r†   Útwisted.internetr   r   r   Útwisted.pythonr   ÚProtocolr   r2   r8   ÚFactoryr”   rc   r0   r   r   ú<module>r£      s]  ðð
ð ð €€€Ø €€€ð €€€Ø €€€ð 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð ð#ð #ð #ð #ð #�hÔ'ñ #ô #ð #ð(#ð #ð #ð #ð #�hÔ'ñ #ô #ð #ð \ð \ð \ð \ð \ˆhÔñ \ô \ð \ð~.ð .ð .ð .ð .�XÔ%ñ .ô .ð .ðð ð ð ð ˜XÔ-ñ ô ð ð ð r   