o
    «¼he  ã                   @   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mZmZ d dl	m
Z
mZ d dlmZ d dlmZ ejejdd e e¡ZG dd	„ d	eƒZG d
d„ deƒZdS )é    N)Ú
HTTPServerÚBaseHTTPRequestHandler)ÚDictÚAny)ÚDriverPlugin)Úsanitize_for_logz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)ÚlevelÚformatc                   @   s@   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S )ÚHTTPHoneypotHandleru   HTTP èœœç½è¯·æ±‚å¤„ç†å™¨c                 C   ó   |   d¡ d S )NÚGET©Ú_handle_request©Úself© r   ú+/root/ive/./drivers/http_honeypot/driver.pyÚdo_GET   ó   zHTTPHoneypotHandler.do_GETc                 C   r   )NÚPOSTr   r   r   r   r   Údo_POST   r   zHTTPHoneypotHandler.do_POSTc                 C   r   )NÚPUTr   r   r   r   r   Údo_PUT   r   zHTTPHoneypotHandler.do_PUTc                 C   r   )NÚDELETEr   r   r   r   r   Ú	do_DELETE   r   zHTTPHoneypotHandler.do_DELETEc                 C   sv   t | jƒ}t | jd ƒ}t d|› d|› d|› ¡ |  d¡ |  dd¡ |  ¡  d| j› d	}| j 	| 
d
¡¡ dS )u   å¤„ç†è¯·æ±‚å¹¶è®°å½•æ—¥å¿—r   z	Received z request for z from éÈ   zContent-typeztext/html; charset=utf-8uB   <html><body><h1>æ¬¢è¿Žè®¿é—®èœœç½!</h1><p>æ‚¨è¯·æ±‚çš„è·¯å¾„æ˜¯: z</p></body></html>zutf-8N)r   ÚpathÚclient_addressÚloggerÚinfoÚsend_responseÚsend_headerÚend_headersÚwfileÚwriteÚencode)r   ÚmethodÚ	safe_pathZsafe_ipÚresponse_contentr   r   r   r      s   

z#HTTPHoneypotHandler._handle_requestc                 G   s4   t |  ¡ ƒ}t || ƒ}t d||  ¡ |f ¡ d S )Nz%s - - [%s] %s
)r   Úaddress_stringr   r   Úlog_date_time_string)r   r	   ÚargsÚ	safe_addrÚsafe_fmtr   r   r   Úlog_message.   s   zHTTPHoneypotHandler.log_messageN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r.   r   r   r   r   r
      s    r
   c                   @   s   e Zd ZdZdd„ Zdeeef defdd„Zdede	fd	d
„Z
dede	fdd„Zdede	fdd„Zdedefdd„Zdeeef fdd„ZdS )ÚHTTPHoneypotDriveru'   
    HTTP èœœç½é©±åŠ¨æ’ä»¶å®žçŽ°
    c                 C   s   i | _ i | _d S )N)ÚenvironmentsÚserversr   r   r   r   Ú__init__9   s   
zHTTPHoneypotDriver.__init__Ú
env_configÚreturnc                 C   s<   dt  ¡ j› }||ddœ| j|< t d|› d|› ¡ |S )u   åˆ›å»ºHTTPèœœç½çŽ¯å¢ƒZ	http_env_Úcreated)ÚidÚconfigÚstatusz"Created HTTP honeypot environment z with config )ÚuuidÚuuid4Úhexr4   r   r   )r   r7   Úenv_idr   r   r   Úcreate_environment=   s   ýz%HTTPHoneypotDriver.create_environmentr@   c              
   C   s  | j  |¡}|st d|› d¡ dS |d dkr$t d|› d¡ dS z…|d }| dd	¡}| d
d¡}| dd¡}t||ftƒ}|r{| d¡}| d¡}	|rr|	rrtj 	|¡rrtj 	|	¡rrt
j|j||	dd|_t d|› ¡ n	t d|› d¡ tj|jdd}
|
 ¡  ||
dœ| j|< d|d< t d|› d|› d|› |r¢dnd› ¡ W dS  tyÇ } zt d|› d|› ¡ W Y d}~dS d}~ww )u   å¯åŠ¨HTTPèœœç½çŽ¯å¢ƒúEnvironment ú
 not foundFr<   Úrunningz is already runningr;   Úhostz0.0.0.0Úporti  ÚsslNÚcertfileÚkeyfileT)rH   rI   Úserver_sidezSSL enabled for environment z*Invalid SSL configuration for environment z. Starting without SSL.)ÚtargetÚdaemon)ÚserverÚthreadz"Started HTTP honeypot environment z on ú:z (HTTPS)z (HTTP)z*Failed to start HTTP honeypot environment ú: )r4   Úgetr   ÚerrorÚwarningr   r
   Úosr   ÚexistsrG   Úwrap_socketÚsocketr   Ú	threadingÚThreadÚserve_foreverÚstartr5   Ú	Exception)r   r@   Úenvr;   rE   rF   Ú
ssl_configrM   rH   rI   Úserver_threadÚer   r   r   Ústart_environmentI   sJ   

 ýþ(€þz$HTTPHoneypotDriver.start_environmentc              
   C   sÔ   | j  |¡}|st d|› d¡ dS |d dkr$t d|› d¡ dS z'| j |¡}|r=|d }| ¡  | ¡  | j|= d|d< t d	|› ¡ W d
S  t	yi } zt d|› d|› ¡ W Y d}~dS d}~ww )u   åœæ­¢HTTPèœœç½çŽ¯å¢ƒrB   rC   Fr<   rD   z is not runningrM   Ústoppedz"Stopped HTTP honeypot environment Tz)Failed to stop HTTP honeypot environment rP   N)
r4   rQ   r   rR   rS   r5   ÚshutdownÚserver_closer   r\   )r   r@   r]   Úserver_inforM   r`   r   r   r   Ústop_environmentz   s,   €þz#HTTPHoneypotDriver.stop_environmentc                 C   sX   | j  |¡}|st d|› d¡ dS |d dkr|  |¡ | j |= t d|› ¡ dS )u   åˆ é™¤HTTPèœœç½çŽ¯å¢ƒrB   rC   Fr<   rD   z"Deleted HTTP honeypot environment T)r4   rQ   r   rR   rf   r   ©r   r@   r]   r   r   r   Údelete_environment”   s   
z%HTTPHoneypotDriver.delete_environmentc                 C   s   | j  |¡}|s
dS |d S )u   èŽ·å–çŽ¯å¢ƒçŠ¶æ€Ú	not_foundr<   )r4   rQ   rg   r   r   r   Úget_environment_status£   s   z)HTTPHoneypotDriver.get_environment_statusc                 C   s   | j S )u   åˆ—å‡ºæ‰€æœ‰çŽ¯å¢ƒ)r4   r   r   r   r   Úlist_environmentsª   s   z$HTTPHoneypotDriver.list_environmentsN)r/   r0   r1   r2   r6   r   Ústrr   rA   Úboolra   rf   rh   rj   rk   r   r   r   r   r3   4   s    1r3   )rX   ÚtimeÚloggingrG   rT   r=   Úhttp.serverr   r   Útypingr   r   Úpluginsr   Úcore.log_utilsr   ÚbasicConfigÚINFOÚ	getLoggerr/   r   r
   r3   r   r   r   r   Ú<module>   s    
$