ó
    Ö›‘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     Ú[C:\Users\psant\Downloads\Noiseback\school\venv\Lib\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 )NéZ   r   )ÚportÚip)Ú	transportÚgetPeerr   Ú	makeReplyr   ÚhostÚ	otherConn)r   Úpeers     r   ÚconnectionMadeÚSOCKSv4Outgoing.connectionMade   sA   € Ø�~‰~×%Ñ%Ó'ˆØ�
‰
×Ñ˜R ¨¯©°t·y±yÐÑ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)ÚSOCKSv4é9   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  o€l        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                  X‡XEU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·~±~ÀbÔ7Ir   )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  € ð �>�>Ø�N‰N× Ñ  Ô&ØØ—8‘8˜d‘?ˆŒØŸ™ˆØ�d—h‘h˜q˜r�lÔ"Ø!ŸX™X b q˜\¨4¯8©8°A°B¨<ˆNˆD”(Ü"(§-¢-°¸¸R¸a¸Ó"AÑˆG˜4Ø!ŸX™XŸ^™^¨G°QÓ7‰NˆD”(Ø�A�aˆy˜OÓ+°°Q°q°	¸WÓ0Dð
  $§(¡(Ó*Ø-”HØØ#'§8¡8§>¡>°'¸1Ó#=Ñ �œØ—L‘L×(Ñ(¨Ó0�Ø—‘˜d×1Ñ1°4À$ÔMØ—‘°ÓIÔJØä×)Ò)¨$¨q°¨)Ó4�à×Ñ ¨g¸TÕ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À!ÀQÀqÁTÈ1ÈQÉ4Ô/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Æ   € ð. ˜!‹|Ð=Ð3°gÑ=Ó=ˆ|Ø�~‰~˜d¨D×7Ñ7Ø�N‰N˜2ÔØØ�1‹9Ø×!Ñ! &´ÀÓFˆAØ�L‰L¨TÓEÕFØ�Q‹YØ× Ñ  Ô$:¸DÓIˆAØ�M‰M¨ÓPÕQäÐ!3°D°6Ð:Ó;Ð;Ø�x‰x˜3‹ÐSÐ BÄTÈ$Ï(É(Ã^Ñ 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$   € Ø�>�>Ø�N‰N×$Ñ$×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!   € Ü�‹ã“V›T£4ð)ô	
ð 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%   € Ü×%Ò%¤g¨uÐ<°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   € Ü× Ò   u¨d |Ó4ˆÜ�}Š}˜TŸ\™\›^¨A¨BÐ/Ó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   € Ø�‰×ÑÜ�KŠK˜ °Ó5¼×8HÒ8HÈÓ8LÑLô	
ð �B‹;Ø�N‰N×)Ñ)Õ+ð 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   € ¨f´s¸1³vªor   Ú é   Ú.Ú
)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Ø—‘Ø—‘ðñô
	
ö Ø˜3˜B�i  b c ˆtØ�G‰G”F—K’K¤Ñ$=¸qÓ AÀ3ÓGÈ#ÑMÔNØ�G‰G�Rœ#˜a›&‘[ AÑ%¨Ñ+Ô,Û�Ü”t˜A“w“< !Ó#Ø—G‘G˜C–Là—G‘G˜A–Jñ	 ð
 �G‰G�DŒM÷ ˆ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   € Ø�‰7�d—g‘gÓØˆDŒGØ�J‰J× Ñ   QÔ'Ü" 4§:¡:Ó.Ð.Ø�W‰W˜‹]Øà�J‰J× Ñ   QÔ'ØˆDŒGØ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   