Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- B
- ����ØÑÕ[½K��ã���������������@���s¾��d�Z�dZd eeedd…�ƒ¡ZdZdZdZdZ dZ
- dd lZdd lZdd l
- Z
- dd lZdd lZdd lZdd lZe e¡Zejd�d
- kZeržeZeZddlmZ�neZeZdd lZd.dd„Zd/dd„ZeeƒZ d\Z!Z"Z#dZ$dZ%dZ&dZ'd
- Z(dZ)dZ*dZ+dZ,dZ-d
- Z.G�dd„�de/ƒZ0G�dd„�de/ƒZ1G�dd„�de/ƒZ2G�dd„�de2ƒZ3G�dd „�d e2ƒZ4G�d!d"„�d"e5ƒZ6G�d#d$„�d$e6ƒZ7G�d%d&„�d&ej8ƒZ9G�d'd(„�d(e/ƒZ:G�d)d*„�d*e:ƒZ;d+d,„�Z<ed-krºe<ƒ��d S�)0z
- leo-mods
- )é����é���Ú.r���r���zHTTP Proxy router em Pythonz @leo_modszlegadospro@gmail.comZBSDNé���)Úparseúutf-8Ústrictc�������������C���s���t�|�tƒr|� ||¡S�|�S�)zn If ``s`` is an instance of ``binary_type``, return
- ``s.decode(encoding, errors)``, otherwise return ``s``)Ú
- isinstanceÚbinary_typeÚdecode)ÚsÚencodingÚerrors©�r���ú routec.pyÚtext_%���s����
- r���c�������������C���s���t�|�tƒr|� ||¡S�|�S�)zl If ``s`` is an instance of ``text_type``, return
- ``s.encode(encoding, errors)``, otherwise return ``s``)r���Ú text_typeÚencode)r���r���r
- ���r���r���r���Úbytes_-���s����
- r���)s���
- ó���:ó��� é���é���é���é���c���������������@���s(���e�Zd�ZdZdd„�Zdd„�Zdd„�ZdS�) ÚChunkParserz&HTTP chunked encoding response parser.c�������������C���s���t�|�_d|�_d|�_d�|�_d�S�)Nó����)Ú#CHUNK_PARSER_STATE_WAITING_FOR_SIZEÚstateÚbodyÚchunkÚsize)Úselfr���r���r���Ú__init__J���s����zChunkParser.__init__c�������������C���s0���t�|ƒdkrdnd}x|r*|� |¡\}}qW�d�S�)Nr���TF)ÚlenÚprocess)r!���ÚdataÚmorer���r���r���r���P���s�����zChunkParser.parsec�������������C���sÌ���|�j�tkr,t |¡\}}t|dƒ|�_t|�_�n|�j�tkr¼|�jt|�jƒ�}|��j|d�|…�7��_||d�…�}t|�jƒ|�jkr¼|tt ƒd�…�}|��j
- |�j7��_
- |�jdkrªt|�_�nt|�_�d|�_d�|�_t|ƒdk|fS�)Né���r���r���)r���r���Ú
- HttpParserÚsplitÚintr ���Ú#CHUNK_PARSER_STATE_WAITING_FOR_DATAr#���r���ÚCRLFr���ÚCHUNK_PARSER_STATE_COMPLETE)r!���r%���ÚlineZ remainingr���r���r���r$���T���s"����
- zChunkParser.processN)Ú__name__Ú
- __module__Ú__qualname__Ú__doc__r"���r���r$���r���r���r���r���r���G���s���r���c���������������@���s`���e�Zd�ZdZddd„Zdd„�Zdd„�Zd d
- „�Zdd„�Zd
- d„�Z dd„�Z
- ddd„Zedd„�ƒZ
- dS�)r(���zHTTP request/response parser.Nc�������������C���sV���t�|�_|r|nt|�_d|�_d|�_tƒ�|�_d�|�_d�|�_ d�|�_
- d�|�_d�|�_d�|�_
- d�|�_d�S�)Nr���)ÚHTTP_PARSER_STATE_INITIALIZEDr���ÚHTTP_REQUEST_PARSERÚtypeÚrawÚbufferÚdictÚheadersr���ÚmethodÚurlÚcodeÚreasonÚversionÚchunker)r!���r5���r���r���r���r"���k���s����zHttpParser.__init__c�������������C���sT���|��j�|7��_�|�j|�}d|�_t|ƒdkr.dnd}x|rH|� |¡\}}q4W�||�_d�S�)Nr���r���TF)r6���r7���r#���r$���)r!���r%���r&���r���r���r���r���}���s����
- zHttpParser.parsec�������������C���s\��|�j�tkrÆ|�jdks|�jtkrÆ|�js*d|�_d|�jkrlt|�_�|��j|7��_t|�jƒt |�jd�d�ƒkrÂt
- |�_�nVd|�jkrÂ|�jd�d� ¡�dkrÂ|�jsšt
- ƒ�|�_|�j |¡�|�jj�tkrÂ|�jj|�_t
- |�_�dS�t |¡\}}|dkrä||fS�|�j�tk�rú|� |¡�n|�j�tk�r|� |¡�|�j�tkrL|�jtkrL|�jdksL|�j td �¡rLt
- |�_�t|ƒd
- k|fS�)Ns���POSTr���s���content-lengthr���s���transfer-encodings���chunked)Fr���Fr���r���)r���Ú"HTTP_PARSER_STATE_HEADERS_COMPLETEr:���r5���ÚHTTP_RESPONSE_PARSERr���r9���ÚHTTP_PARSER_STATE_RCVING_BODYr#���r*���ÚHTTP_PARSER_STATE_COMPLETEÚlowerr?���r���r���r-���r(���r)���ÚHTTP_PARSER_STATE_LINE_RCVDÚprocess_lineÚprocess_headerr4���r6���Úendswithr,���)r!���r%���r.���r���r���r���r$���‡���s<����
- �
- zHttpParser.processc�������������C���sp���| �t¡}|�jtkr>|d� ¡�|�_t |d�¡|�_|d�|�_ n(|d�|�_ |d�|�_
- d |dd�…�¡|�_t
- |�_d�S�)Nr���r���r���r���)r)���ÚSPr5���r4���Úupperr:���ÚurlparseZurlsplitr;���r>���r<���Újoinr=���rE���r���)r!���r%���r.���r���r���r���rF���¬���s����
- zHttpParser.process_linec�������������C���sx���t�|ƒdkr0|�jtkrt|�_qt|�jtkrtt|�_nDt|�_| t¡}|d� ¡�}t |dd�…�¡ ¡�}||f|�j |
- ¡�<�d�S�)Nr���r���)r#���r���Ú HTTP_PARSER_STATE_RCVING_HEADERSr@���rE���r)���ÚCOLONÚstriprL���r9���rD���)r!���r%���ÚpartsÚkeyÚvaluer���r���r���rG���¸���s����
- zHttpParser.process_headerc�������������C���sZ���|�j�s
- dS�|�j�j}|dkrd}|�j�jdks:|d|�j�j�7�}|�j�jdksV|d|�j�j�7�}|S�)Ns���/Noner���ó���/ó���?ó���#)r;���ÚpathZqueryZfragment)r!���r;���r���r���r���Ú build_urlÅ���s�������zHttpParser.build_urlc�������������C���s���|d�|�t��S�)Ns���: )r,���)r!���ÚkÚvr���r���r���Úbuild_headerÏ���s����zHttpParser.build_headerc�������������C���s®���d �|�j|� ¡�|�jg¡}|t7�}|s(g�}x:|�jD�]0}||kr0||� |�j|�d�|�j|�d�¡7�}q0W�|slg�}x$|D�]}||� |d�|d�¡7�}qrW�|t7�}|�jrª||�j7�}|S�)Nr���r���r���)rL���r:���rW���r>���r,���r9���rZ���r���)r!���Údel_headersÚadd_headersZreqrX���r���r���r���ÚbuildÒ���s�����(�
- zHttpParser.buildc�������������C���sB���|� �t¡}|dkrd|�fS�|�d�|…�}|�|ttƒ�d�…�}�||�fS�)NéÿÿÿÿF)Úfindr,���r#���)r%���Úposr.���r���r���r���r)���å���s����
- �zHttpParser.split)N)NN)r/���r0���r1���r2���r"���r���r$���rF���rG���rW���rZ���r]���Ústaticmethodr)���r���r���r���r���r(���h���s���
- %
- r(���c���������������@���sR���e�Zd�ZdZdd„�Zdd„�Zddd„Zd d
- „�Zdd„�Zd
- d„�Z dd„�Z
- dd„�ZdS�)Ú
- Connectionz)TCP server/client connection abstraction.c�������������C���s���d|�_�d|�_||�_d�S�)Nr���F)r7���ÚclosedÚwhat)r!���rd���r���r���r���r"���ð���s����zConnection.__init__c�������������C���s���|�j� |¡S�)N)ÚconnÚsend)r!���r%���r���r���r���rf���õ���s����zConnection.sendé� ��c����������
- ���C���sˆ���yH|�j� |¡}t|ƒdkr.t d|�j�¡�d�S�t dt|ƒ|�jf�¡�|S��tk
- r‚�}�zt d|�j|�j�|f�¡�d�S�d�}~X�Y�nX�d�S�)Nr���zrecvd 0 bytes from %szrcvd %d bytes from %sz>Exception while receiving from connection %s %r with reason %r)re���Úrecvr#���ÚloggerÚdebugrd���Ú ExceptionÚ exception)r!���Úbytesr%���Úer���r���r���rh���ø���s����zConnection.recvc�������������C���s���|�j� ¡��d|�_d�S�)NT)re���Úcloserc���)r!���r���r���r���ro�����s����
- zConnection.closec�������������C���s
- ���t�|�jƒS�)N)r#���r7���)r!���r���r���r���Úbuffer_size��s����zConnection.buffer_sizec�������������C���s���|� �¡�dkS�)Nr���)rp���)r!���r���r���r���Ú
- has_buffer��s����zConnection.has_bufferc�������������C���s���|��j�|7��_�d�S�)N)r7���)r!���r%���r���r���r���Úqueue��s����zConnection.queuec�������������C���s4���|� �|�j¡}|�j|d�…�|�_t d||�jf�¡�d�S�)Nzflushed %d bytes to %s)rf���r7���ri���rj���rd���)r!���Zsentr���r���r���Úflush��s����zConnection.flushN)rg���)r/���r0���r1���r2���r"���rf���rh���ro���rp���rq���rr���rs���r���r���r���r���rb���í���s���
- rb���c�������������������s(���e�Zd�ZdZ‡�fdd„Zdd„�Z‡��ZS�)ÚServerz+Establish connection to destination server.c����������������s"���t�t|�ƒ d¡�|t|ƒf|�_d�S�)Ns���server)Úsuperrt���r"���r*���Úaddr)r!���ÚhostÚport)Ú __class__r���r���r"�����s����zServer.__init__c�������������C���s2���t� �t�jt�j¡|�_|�j |�jd�|�jd�f¡�d�S�)Nr���r���)ÚsocketÚAF_INETÚSOCK_STREAMre���Úconnectrv���)r!���r���r���r���r}�����s����zServer.connect)r/���r0���r1���r2���r"���r}���Ú
- __classcell__r���r���)ry���r���rt�����s���rt���c�������������������s ���e�Zd�ZdZ‡�fdd„Z‡��ZS�)ÚClientzAccepted client connection.c����������������s ���t�t|�ƒ d¡�||�_||�_d�S�)Ns���client)ru���r���r"���re���rv���)r!���re���rv���)ry���r���r���r"���$��s����zClient.__init__)r/���r0���r1���r2���r"���r~���r���r���)ry���r���r���!��s���r���c���������������@���s���e�Zd�ZdS�)Ú
- ProxyErrorN)r/���r0���r1���r���r���r���r���r€���)��s���r€���c���������������@���s���e�Zd�Zdd„�Zdd„�ZdS�)ÚProxyConnectionFailedc�������������C���s���||�_�||�_||�_d�S�)N)rw���rx���r=���)r!���rw���rx���r=���r���r���r���r"���.��s����zProxyConnectionFailed.__init__c�������������C���s���d|�j�|�j|�jf�S�)Nz$<ProxyConnectionFailed - %s:%s - %s>)rw���rx���r=���)r!���r���r���r���Ú__str__3��s����zProxyConnectionFailed.__str__N)r/���r0���r1���r"���r‚���r���r���r���r���r���,��s���r���c�������������������sx���e�Zd�ZdZ‡�fdd„Zdd„�Zdd„�Zdd „�Zd
- d„�Zdd
- „�Z dd„�Z
- dd„�Zdd„�Zdd„�Z
- dd„�Zdd„�Z‡��ZS�)ÚProxyzFavor nao modificar
- c����������������sX���t�t|�ƒ ¡��|� ¡�|�_|�j|�_||�_d�|�_tƒ�|�_ tt
- ƒ|�_t
- ddt�tg¡|�_d�S�)Ns���HTTP/1.1 200 Leo_modss���Proxy-agent: legadospro v)ru���rƒ���r"���Ú_nowZ
- start_timeÚ
- last_activityÚclientÚserverr(���ÚrequestrA���Úresponser,���rL���r>���Úconnection_established_pkt)r!���r†���)ry���r���r���r"���:��s����
- zProxy.__init__c�������������C���s
- ���t�j� ¡�S�)N)ÚdatetimeZutcnow)r!���r���r���r���r„���L��s����z
- Proxy._nowc�������������C���s���|� �¡�|�j�jS�)N)r„���r…���Zseconds)r!���r���r���r���Ú
- _inactive_forO��s����zProxy._inactive_forc�������������C���s���|� �¡�dkS�)Né���)rŒ���)r!���r���r���r���Ú_is_inactiveR��s����zProxy._is_inactivec����������
- ���C���sN��|�j�r|�j�js|�j� |¡�d�S�|�j |¡�|�jjtkrJt d¡�|�jj dkrd|�jj
- j t
- ¡\}}n,|�jj
- r|�jj
- j|�jj
- jrˆ|�jj
- jnd�}}t||ƒ|�_�y2t d||f�¡�|�j� ¡��t d||f�¡�W�n<�tk
- r
- �}�zd|�j�_t||t|ƒƒ‚W�d�d�}~X�Y�nX�|�jj dkr*|�j |�j¡�n |�j� |�jjddd gd
- gd¡�d�S�)Nz#request parser is in state completes���CONNECTéP���zconnectando no servidor %s:%szconnectado com sucesso %s:%sTs���proxy-connections
- ���connections
- ���keep-alive)s
- ���Connections���Close)r[���r\���)r‡���rc���rr���rˆ���r���r���rC���ri���rj���r:���r;���rV���r)���rN���Úhostnamerx���rt���r}���rk���r���Úreprr†���rŠ���r]���)r!���r%���rw���rx���rn���r���r���r���Ú_process_requestU��s.����
- $
- "zProxy._process_requestc�������������C���s(���|�j�jdks|�j |¡�|�j |¡�d�S�)Ns���CONNECT)rˆ���r:���r‰���r���r†���rr���)r!���r%���r���r���r���Ú_process_response��s����zProxy._process_responsec����������
- ���C���s¦���|�j�r|�j�jnd\}}|�jjdkrPt d|�jjd�|�jjd�|�jj||f�¡�nR|�jjr¢t d|�jjd�|�jjd�|�jj|||�j ¡�|�jj |�jj
- t|�jjƒf �¡�d�S�)N)NNs���CONNECTz%s:%s - %s %s:%sr���r���z%%s:%s - %s %s:%s%s - %s %s - %s bytes)
- r‡���rv���rˆ���r:���ri���Úinfor†���rW���r‰���r<���r=���r#���r6���)r!���rw���rx���r���r���r���Ú_access_logŠ��s
- ����.zProxy._access_logc�������������C���s¢���|�j�jgg�g���}}}t d¡�|�j� ¡�rBt d¡�| |�j�j¡�|�jrh|�jjsht d¡�| |�jj¡�|�jr˜|�jjs˜|�j ¡�r˜t d¡�| |�jj¡�|||fS�)Nz*** esperando clientezRO buffer de cliente pendente encontrado, assistindo o cliente para escrever prontozconexao com o cliente ligadazcliente conectado)r†���re���ri���rj���rq���Úappendr‡���rc���)r!���ÚrlistÚwlistÚxlistr���r���r���Ú_get_waitable_lists‘��s����
- zProxy._get_waitable_listsc�������������C���sR���|�j�j|kr t d¡�|�j� ¡��|�jrN|�jjsN|�jj|krNt d¡�|�j ¡��d�S�)Nz cliente conectado limpado bufferz2server is ready for writes, flushing server buffer)r†���re���ri���rj���rs���r‡���rc���)r!���Úwr���r���r���Ú_process_wlist£��s����
- zProxy._process_wlistc�������������C���s��|�j�j|kr¦t d¡�|�j� ¡�}|� ¡�|�_|s<t d¡�dS�y|� |¡�W�nZ�tk
- r¤�}�z<t |¡�|�j�
- t ddt
- �ddtg¡d�¡�|�j� ¡��dS�d�}~X�Y�nX�|�jr
- |�jjs
- |�jj|kr
- t d ¡�|�j ¡�}|� ¡�|�_|s�t d
- ¡�|�j ¡��n
- |� |¡�dS�)Nz"client is ready for reads, readingz"client closed connection, breakingTs���HTTP/1.1 502 Bad Gateways���Proxy-agent: legadospro vs���Content-Length: 11s���Connection: closes���Funcionando normalmenteu*���servidor está pronto para leituras, lendou���conexão fechada do servidorF)r†���re���ri���rj���rh���r„���r…���r’���r���rl���rr���r,���rL���r>���rs���r‡���rc���ro���r“���)r!���Úrr%���rn���r���r���r���Ú_process_rlist¬��s:����
- zProxy._process_rlistc�������������C���s~���xx|� �¡�\}}}t |||d¡\}}}|� |¡�|� |¡r<P�|�j ¡�dkr|�jjtkrbt
- d¡�P�|� ¡�rt
- d¡�P�qW�d�S�)Nr���r���z?client buffer is empty and response state is complete, breakingzCclient buffer is empty and maximum inactivity has reached, breaking)rš���Úselectrœ���rž���r†���rp���r‰���r���rC���ri���rj���rŽ���)r!���r—���r˜���r™���r���r›���Úxr���r���r���Ú_processÑ��s����
- zProxy._processc�������������C���sØ���t� d|�jj|�jjf�¡�z\y|� ¡��W�nJ�tk
- r<���Y�n8�tk
- rr�}�zt� d|�jj|f�¡�W�d�d�}~X�Y�nX�W�d�t� d|�j ¡��¡�|�j
- ¡��|�jr°t� d|�j ¡��¡�|� ¡��t� d|�jj|�jjf�¡�X�d�S�)Nz$Proxying connection %r at address %rz5Exception while handling connection %r with reason %rzBclosing client connection with pending client buffer size %d byteszAclosed client connection with pending server buffer size %d bytesz-Closing proxy for connection %r at address %r)
- ri���rj���r†���re���rv���r¡���ÚKeyboardInterruptrk���rl���rp���ro���r‡���r•���)r!���rn���r���r���r���Úrunã��s����,
- z Proxy.run)r/���r0���r1���r2���r"���r„���rŒ���rŽ���r’���r“���r•���rš���rœ���rž���r¡���r£���r~���r���r���)ry���r���rƒ���6��s���, %rƒ���c���������������@���s*���e�Zd�ZdZddd„Zdd„�Zd d
- „�ZdS�)
- ÚTCPzTCP server implementation.ú192.168.43.1é��éd���c�������������C���s���||�_�||�_||�_d�S�)N)r���rx���Úbacklog)r!���r���rx���r¨���r���r���r���r"���ö��s����zTCP.__init__c�������������C���s
- ���t�ƒ�‚d�S�)N)ÚNotImplementedError)r!���r†���r���r���r���Úhandleû��s����z
- TCP.handlec����������
- ���C���sè���zÌy–t� d|�j�¡�t tjtj¡|�_|�j tjtjd¡�|�j |�j
- |�jf¡�|�j |�j¡�x8|�j
- ¡�\}}t� d||f�¡�t||ƒ}|� |¡�q^W�W�n0�tk
- rÈ�}�zt� d|�¡�W�d�d�}~X�Y�nX�W�d�t� d¡�|�j ¡��X�d�S�)Nz port %dr���z$Accepted connection %r at address %rz%Exception while running the server %rzClosing server socket)ri���r”���rx���rz���r{���r|���Z
- setsockoptZ
- SOL_SOCKETZSO_REUSEADDRZbindr���Zlistenr¨���Zacceptrj���r���rª���rk���rl���ro���)r!���re���rv���r†���rn���r���r���r���r£���þ��s����
- $
- zTCP.runN)r¥���r¦���r§���)r/���r0���r1���r2���r"���rª���r£���r���r���r���r���r¤���ó��s���
- r¤���c���������������@���s���e�Zd�ZdZdd„�ZdS�)ÚHTTPzgHTTP proxy server implementation.
- Spawns new process to proxy accepted client connection.
- c�������������C���s.���t�|ƒ}d|_| ¡��t d||jf�¡�d�S�)NTz*Started process %r to handle connection %r)rƒ���ZdaemonÚstartri���rj���re���)r!���r†���Úprocr���r���r���rª�����s����zHTTP.handleN)r/���r0���r1���r2���rª���r���r���r���r���r«�����s���r«���c��������������C���s¤���t�jdt�dt�d}�|�jdddd�|�jdd d
- d�|�jddd
- d�|� ¡�}tjtt|j ƒdd�|j
- }t|jƒ}yt
- ||ƒ}| ¡��W�n�tk
- rž���Y�nX�d�S�)Nz
- routec.py v%sz0esta com dificuldade? Report at: %s no telegram)ZdescriptionZepilogz
- --hostnamez192.168.43.1zDefault: 192.168.43.1)ÚdefaultÚhelpz--portZ8080z
- Default: 8080z--log-levelÚINFOz%DEBUG, INFO, WARNING, ERROR, CRITICALz%(message)s)ÚlevelÚformat)ÚargparseÚArgumentParserÚ__version__Ú__homepage__Úadd_argumentÚ
- parse_argsÚloggingZbasicConfigÚgetattrZ log_levelr���r*���rx���r«���r£���r¢���)ÚparserÚargsr���rx���Úproxyr���r���r���Úmain��s����
- r¾���Ú__main__)r���r���)r���r���)=r2���ZVERSIONrL���ÚmapÚstrrµ���Z__description__Ú
- __author__Z__author_email__r¶���Z__license__ÚsysZmultiprocessingr‹���r³���r¹���rz���rŸ���Z getLoggerr/���ri���Úversion_infoZPY3r���rm���r ���Zurllibr���rK���Zunicoder���r���r>���r,���rN���rI���r4���rA���r3���rE���rM���r@���rB���rC���r���r+���r-���Úobjectr���r(���rb���rt���r���rk���r€���r���ZProcessrƒ���r¤���r«���r¾���r���r���r���r���Ú<module>���sj���
- !�)
- �>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement