
    ہhe                         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        ej$                  e      Z G d d	e      Z G d
 de      Zy)    N)
HTTPServerBaseHTTPRequestHandler)DictAny)DriverPlugin)sanitize_for_logz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)levelformatc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	HTTPHoneypotHandleru   HTTP 蜜罐请求处理器c                 &    | j                  d       y )NGET_handle_requestselfs    0E:\workrun\ive\./drivers\http_honeypot\driver.pydo_GETzHTTPHoneypotHandler.do_GET       U#    c                 &    | j                  d       y )NPOSTr   r   s    r   do_POSTzHTTPHoneypotHandler.do_POST   s    V$r   c                 &    | j                  d       y )NPUTr   r   s    r   do_PUTzHTTPHoneypotHandler.do_PUT   r   r   c                 &    | j                  d       y )NDELETEr   r   s    r   	do_DELETEzHTTPHoneypotHandler.do_DELETE   s    X&r   c                 t   t        | j                        }t        | j                  d         }t        j	                  d| d| d|        | j                  d       | j                  dd       | j                          d| j                   d	}| j                  j                  |j                  d
             y)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_pathsafe_ipresponse_contents        r   r   z#HTTPHoneypotHandler._handle_request   s     %TYY/	"4#6#6q#9:ix}YKvgYOP 	3)CD_`d`i`i_jj|}

)009:r   c                     t        | j                               }t        ||z        }t        j                  |d| j	                         d|d       y )Nz - - [z] 
)r   address_stringr$   r%   log_date_time_string)r   r
   args	safe_addrsafe_fmts        r   log_messagezHTTPHoneypotHandler.log_message.   s@    $T%8%8%:;	#FTM2)T5N5N5PRZ[\r   N)
__name__
__module____qualname____doc__r   r   r   r   r   r7    r   r   r   r      s$    $$%$';]r   r   c                       e Zd ZdZd Zdeeef   defdZdede	fdZ
dede	fdZdede	fd	Zdedefd
Zdeeef   fdZy)HTTPHoneypotDriveru'   
    HTTP 蜜罐驱动插件实现
    c                      i | _         i | _        y )N)environmentsserversr   s    r   __init__zHTTPHoneypotDriver.__init__9   s    r   
env_configreturnc                     dt        j                         j                   }||dd| j                  |<   t        j                  d| d|        |S )u   创建HTTP蜜罐环境	http_env_created)idconfigstatusz"Created HTTP honeypot environment z with config )uuiduuid4hexr@   r$   r%   )r   rC   env_ids      r   create_environmentz%HTTPHoneypotDriver.create_environment=   sY     TZZ\--./ %
&!
 	8j\Z[r   rN   c           	         | j                   j                  |      }|st        j                  d| d       y|d   dk(  rt        j	                  d| d       y	 |d   }|j                  dd	      }|j                  d
d      }|j                  dd      }t        ||ft              }|r|j                  d      }|j                  d      }	|r|	rt        j                  j                  |      r`t        j                  j                  |	      rAt        j                  |j                  ||	d      |_        t        j                  d|        nt        j	                  d| d       t        j                  |j                   d      }
|
j#                          ||
d| j$                  |<   d|d<   t        j                  d| d| d| |rdnd        y# t&        $ r%}t        j                  d| d|        Y d}~yd}~ww xY w)u   启动HTTP蜜罐环境Environment 
 not foundFrJ   runningz is already runningrI   hostz0.0.0.0porti  sslNcertfilekeyfileT)rW   rX   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 : )r@   getr$   errorwarningr   r   osr"   existsrV   wrap_socketsocketr%   	threadingThreadserve_foreverstartrA   	Exception)r   rN   envrI   rT   rU   
ssl_configr\   rW   rX   server_threades               r   start_environmentz$HTTPHoneypotDriver.start_environmentI   s   ##F+LL<xz:;x=I%NN\&1DEF$	]F::fi0D::fd+DE40J  t.ABF %>>*5$..3BGGNN8,DX_I`$'OOFMM<D;B?C%EFM KK">vh GHNN%OPVxWn#op%,,F4H4HQUVM! !'$DLL 
 &CMKK<VHDaPTvdnV`t}U~  A 	LLEfXRPQsST	s   E9G 	HG>>Hc                    | j                   j                  |      }|st        j                  d| d       y|d   dk7  rt        j	                  d| d       y	 | j
                  j                  |      }|r2|d   }|j                          |j                          | j
                  |= d|d<   t        j                  d	|        y
# t        $ r%}t        j                  d| d|        Y d}~yd}~ww xY w)u   停止HTTP蜜罐环境rQ   rR   FrJ   rS   z is not runningr\   stoppedz"Stopped HTTP honeypot environment Tz)Failed to stop HTTP honeypot environment r_   N)
r@   r`   r$   ra   rb   rA   shutdownserver_closer%   rk   )r   rN   rl   server_infor\   ro   s         r   stop_environmentz#HTTPHoneypotDriver.stop_environmentz   s    ##F+LL<xz:;x=I%NN\&AB	,,**62K$X.!##%LL(%CMKK<VHEF 	LLDVHBqcRS	s   A,C 	C6C11C6c                     | j                   j                  |      }|st        j                  d| d       y|d   dk(  r| j	                  |       | j                   |= t        j                  d|        y)u   删除HTTP蜜罐环境rQ   rR   FrJ   rS   z"Deleted HTTP honeypot environment T)r@   r`   r$   ra   rv   r%   r   rN   rl   s      r   delete_environmentz%HTTPHoneypotDriver.delete_environment   st    ##F+LL<xz:; x=I%!!&)f%8ABr   c                 H    | j                   j                  |      }|sy|d   S )u   获取环境状态	not_foundrJ   )r@   r`   rx   s      r   get_environment_statusz)HTTPHoneypotDriver.get_environment_status   s(    ##F+8}r   c                     | j                   S )u   列出所有环境)r@   r   s    r   list_environmentsz$HTTPHoneypotDriver.list_environments   s       r   N)r8   r9   r:   r;   rB   r   strr   rO   boolrp   rv   ry   r|   r~   r<   r   r   r>   r>   4   s    
T#s(^ 
 
/ / /bs t 4  S S !4S> !r   r>   )rg   timeloggingrV   rc   rK   http.serverr   r   typingr   r   pluginsr   core.log_utilsr   basicConfigINFO	getLoggerr8   r$   r   r>   r<   r   r   <module>r      sl       
 	  :    +   ',,/e f			8	$"]0 "]Hx! x!r   