a
    kÄ#dá?  ã                   @   sH  d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZ dZddd	œZd
dddddddddddddddœZddddddd d!œZG d"d#„ d#eƒZd$d%gZd&d'gZG d(d)„ d)eƒZd*d+d,d-d.d/œZG d0d1„ d1eƒZdd2d3d4œZ G d5d6„ d6eƒZ!d*d+d	œZ"G d7d8„ d8eƒZ#G d9d:„ d:eƒZ$d*d+d	œZ%G d;d<„ d<eƒZ&d=d>d?d4œZ'd@dAdBd4œZ(G dCdD„ dDeƒZ)dEd+dFdGdHdIdJdKœZ*G dLdM„ dMeƒZ+G dNdO„ dOeƒZ,G dPdQ„ dQeƒZ-G dRdS„ dSeƒZ.G dTdU„ dUeƒZ/dVd+dWdXdYœZ0G dZd[„ d[eƒZ1G d\d]„ d]eƒZ2G d^d_„ d_eƒZ3eeed`da� eeed`db� dcS )dz6
PPTP (Point to Point Tunneling Protocol)

[RFC 2637]
é    )ÚPacketÚbind_layers)ÚTCP)Úorb)ÚByteEnumFieldÚFieldLenFieldÚ
FlagsFieldÚIntFieldÚIntEnumFieldÚLenFieldÚ	XIntFieldÚ
ShortFieldÚShortEnumFieldÚStrFixedLenFieldÚStrLenFieldÚXShortFieldÚ
XByteFieldiM<+zControl MessagezManagemenent Message)é   é   z Start-Control-Connection-RequestzStart-Control-Connection-ReplyzStop-Control-Connection-RequestzStop-Control-Connection-ReplyzEcho-Requestz
Echo-ReplyzOutgoing-Call-RequestzOutgoing-Call-ReplyzIncoming-Call-RequestzIncoming-Call-ReplyzIncoming-Call-ConnectedzCall-Clear-RequestzCall-Disconnect-NotifyzWAN-Error-NotifyzSet-Link-Info)r   r   é   é   é   é   é   é   é	   é
   é   é   é   é   é   ÚNonezNot-Connectedz
Bad-Formatz	Bad-ValuezNo-ResourcezBad-Call IDz	PAC-Error)r   r   r   r   r   r   r   c                
   @   sz   e Zd Zd Zedddddd„ d�edd	eƒed
eƒedd	e	ƒe
ddƒedddd„ d�gZi Zedd„ ƒZeddd„ƒZdS )ÚPPTPÚlenNÚHÚdatac                 C   s   |d S ©Nr   © )ÚpÚxr(   r(   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/pptp.pyÚ<lambda>8   ó    zPPTP.<lambda>)ÚfmtZ	length_ofÚadjustÚtyper   Úmagic_cookieÚctrl_msg_typeÚ
reserved_0r   Ú c                 C   s
   | j d S r'   )r$   )r)   r(   r(   r+   r,   =   r-   )Zlength_fromc                 C   s   | | j | jj< d S ©N)Úregistered_optionsr2   Údefault)Úclsr(   r(   r+   Úregister_variantA   s    zPPTP.register_variantc                 O   s"   |rt |d ƒ}| j || ¡S | S )Nr   )r   r6   Úget)r8   Z_pktÚargsZkargsÚor(   r(   r+   Údispatch_hookE   s    zPPTP.dispatch_hook)N)Ú__name__Ú
__module__Ú__qualname__Únamer   r   Ú_PPTP_msg_typer   Ú_PPTP_MAGIC_COOKIEÚ_PPTP_ctrl_msg_typer   r   Úfields_descr6   Úclassmethodr9   r=   r(   r(   r(   r+   r#   5   s   
ÿ

ú
r#   zAsynchronous Framing supportedzSynchronous Framing supportedzAnalog access supportedzDigital access supportedc                   @   sŒ   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
dd	ƒed
dƒe
dd	ƒedd	deƒedd	deƒeddƒeddƒedddƒedddƒgZdS )Ú!PPTPStartControlConnectionRequestz%PPTP Start Control Connection Requestr$   éœ   r0   r   r1   r2   r3   r   Úprotocol_versioné   Ú
reserved_1Úframing_capabilitiesé    Úbearer_capabilitiesÚmaximum_channelséÿÿ  Úfirmware_revisionÚ	host_nameÚlinuxé@   Úvendor_stringr4   N)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r   Ú _PPTP_FRAMING_CAPABILITIES_FLAGSÚ_PPTP_BEARER_CAPABILITIES_FLAGSr   rE   r(   r(   r(   r+   rG   T   s&   

ÿÿ

òrG   ÚOKzGeneral errorzCommand channel already existszNot authorizedzUnsupported protocol version)r   r   r   r   r   c                   @   s    e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒeddeƒedd
eƒedd
deƒedd
deƒeddƒeddƒedddƒedddƒgZdd„ ZdS )ÚPPTPStartControlConnectionReplyz#PPTP Start Control Connection Replyr$   rH   r0   r   r1   r2   r   r3   r   rI   rJ   Úresult_codeÚ
error_coderL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   r4   c                 C   s
   t |tƒS r5   )Ú
isinstancerG   ©ÚselfÚotherr(   r(   r+   Úanswers‚   s    z'PPTPStartControlConnectionReply.answersN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r   Ú%_PPTP_start_control_connection_resultÚ_PPTP_general_error_coder   rV   rW   r   rE   r`   r(   r(   r(   r+   rY   n   s.   

ÿ
ÿÿ

ðrY   zStop-ProtocolzStop-Local-Shutdown)r   r   r   c                
   @   sZ   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddeƒedd
ƒe
dd
ƒgZdS )Ú PPTPStopControlConnectionRequestz$PPTP Stop Control Connection Requestr$   é   r0   r   r1   r2   r   r3   r   ÚreasonrK   Ú
reserved_2N)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   Ú$_PPTP_stop_control_connection_reasonr   rE   r(   r(   r(   r+   rc   ‹   s   

ÿørc   c                
   @   sd   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddeƒedd
eƒe
dd
ƒgZdd„ ZdS )ÚPPTPStopControlConnectionReplyz"PPTP Stop Control Connection Replyr$   rd   r0   r   r1   r2   r   r3   r   rZ   r[   rf   c                 C   s
   t |tƒS r5   )r\   rc   r]   r(   r(   r+   r`   ¨   s    z&PPTPStopControlConnectionReply.answersN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   Ú$_PPTP_stop_control_connection_resultrb   rE   r`   r(   r(   r(   r+   rh   œ   s   

ÿ
ø
rh   c                   @   sH   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒgZdS )ÚPPTPEchoRequestzPPTP Echo Requestr$   rd   r0   r   r1   r2   r   r3   r   Ú
identifierN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r	   rE   r(   r(   r(   r+   rj   ¬   s   

ûrj   c                   @   sl   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒeddeƒedd
eƒe
dd
ƒg	Zdd„ ZdS )ÚPPTPEchoReplyzPPTP Echo Replyr$   é   r0   r   r1   r2   r   r3   r   rk   NrZ   r[   rK   c                 C   s   t |tƒo|j| jkS r5   )r\   rj   rk   r]   r(   r(   r+   r`   Æ   s    zPPTPEchoReply.answers)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r	   r   Ú_PPTP_echo_resultrb   rE   r`   r(   r(   r(   r+   rl   º   s   



ø
rl   zAnalog channelzDigital channelzAny type of channelzAsynchronous framingzSynchronous framingzAny type of framingc                   @   s¨   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒedd
ƒeddƒeddƒeddeƒeddeƒeddƒedd
ƒedd
ƒe
dd
ƒedddƒedddƒgZdS )ÚPPTPOutgoingCallRequestzPPTP Outgoing Call Requestr$   é¨   r0   r   r1   r2   r   r3   r   Úcall_idÚcall_serial_numberZminimum_bpsi €  Zmaximum_bpsl        Úbearer_typer   Úframing_typeÚpkt_window_sizerd   Úpkt_proc_delayZphone_number_lenrK   Zphone_numberr4   rT   Ú
subaddressN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r	   r
   Ú_PPTP_bearer_typeÚ_PPTP_framing_typer   rE   r(   r(   r(   r+   ro   Ó   s&   





ðro   Z	Connectedz
No CarrierZBusyzNo dial tonezTime-outzDo not accept)r   r   r   r   r   r   r   c                   @   s”   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒeddƒeddeƒedd
eƒedd
ƒeddƒeddƒedd
ƒedd
ƒgZdd„ ZdS )ÚPPTPOutgoingCallReplyzPPTP Outgoing Call Replyr$   rM   r0   r   r1   r2   r   r3   r   rq   Úpeer_call_idrZ   r[   Ú
cause_codeÚconnect_speedé áõru   rd   rv   Ú
channel_idc                 C   s   t |tƒo|j| jkS r5   )r\   ro   rq   r{   r]   r(   r(   r+   r`     s    zPPTPOutgoingCallReply.answersN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r   Ú_PPTP_result_coderb   r	   rE   r`   r(   r(   r(   r+   rz   ñ   s"   



órz   c                   @   s�   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒeddƒeddeƒedd
ƒedd
ƒedd
ƒedddƒedddƒedddƒgZdS )ÚPPTPIncomingCallRequestzPPTP Incoming Call Requestr$   éÜ   r0   r   r1   r2   r   r3   r   rq   rr   rs   r   r   Zdialed_number_lenZdialing_number_lenZdialed_numberr4   rT   Zdialing_numberrw   N)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r
   rx   r	   r   rE   r(   r(   r(   r+   r�     s    





ór�   c                   @   s„   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒeddƒeddeƒedd
eƒeddƒedd
ƒe
dd
ƒgZdd„ ZdS )ÚPPTPIncomingCallReplyzPPTP Incoming Call Replyr$   é”   r0   r   r1   r2   r   r3   r   rq   r{   rZ   r[   ru   rT   Úpkt_transmit_delayrK   c                 C   s   t |tƒo|j| jkS r5   )r\   r�   rq   r{   r]   r(   r(   r+   r`   '  s    zPPTPIncomingCallReply.answersN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r   r€   rb   rE   r`   r(   r(   r(   r+   rƒ     s   



õrƒ   c                   @   sz   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒe
dd
ƒeddƒeddƒedd
ƒeddeƒgZdd„ ZdS )ÚPPTPIncomingCallConnectedzPPTP Incoming Call Connectedr$   é   r0   r   r1   r2   r   r3   r   r{   rK   r}   r~   ru   rT   r…   rt   c                 C   s   t |tƒo|j| jkS r5   )r\   rƒ   rq   r{   r]   r(   r(   r+   r`   9  s    z!PPTPIncomingCallConnected.answersN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r	   r
   ry   rE   r`   r(   r(   r(   r+   r†   +  s   


ör†   c                	   @   sP   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒe
dd
ƒgZdS )ÚPPTPCallClearRequestzPPTP Call Clear Requestr$   rd   r0   r   r1   r2   r   r3   r   rq   rK   N©r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   rE   r(   r(   r(   r+   rˆ   =  s   

úrˆ   zLost CarrierzAdmin ShutdownÚRequest)r   r   r   r   c                   @   sv   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒeddeƒedd
eƒedd
ƒe
dd
ƒedddƒgZdS )ÚPPTPCallDisconnectNotifyzPPTP Call Disconnect Notifyr$   r„   r0   r   r1   r2   r   r3   r   rq   rZ   r[   r|   rK   Zcall_statisticr4   é€   N)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r   Ú_PPTP_call_disconnect_resultrb   r   rE   r(   r(   r(   r+   r‹   N  s   

ÿ

õr‹   c                   @   s€   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒe
dd
ƒedd
ƒedd
ƒedd
ƒedd
ƒedd
ƒedd
ƒgZdS )ÚPPTPWANErrorNotifyzPPTP WAN Error Notifyr$   é(   r0   r   r1   r2   r    r3   r   r{   rK   Z
crc_errorsZframing_errorsZhardware_overrunsZbuffer_overrunsZtime_out_errorsZalignment_errorsN)r>   r?   r@   rA   r   r   rB   r   rC   rD   r   r   r	   rE   r(   r(   r(   r+   rŽ   ^  s   

ôrŽ   c                   @   s`   e Zd ZdZeddƒeddeƒedeƒedde	ƒe
d	d
ƒeddƒe
dd
ƒedd
ƒedd
ƒg	ZdS )ÚPPTPSetLinkInfozPPTP Set Link Infor$   é   r0   r   r1   r2   r!   r3   r   r{   rK   Z	send_accmZreceive_accmNr‰   r(   r(   r(   r+   r�   o  s   

ør�   i»  )Zsport)ÚdportN)4Ú__doc__Zscapy.packetr   r   Zscapy.layers.inetr   Zscapy.compatr   Zscapy.fieldsr   r   r   r	   r
   r   r   r   r   r   r   r   r   rC   rB   rD   rb   r#   rV   rW   rG   ra   rY   rg   rc   ri   rh   rj   rn   rl   rx   ry   ro   r€   rz   r�   rƒ   r†   rˆ   r�   r‹   rŽ   r�   r(   r(   r(   r+   Ú<module>   sº   <ÿîú	ÿÿüþÿ
ÿþþú	ý