a
    kÄ#d�v  ã                –   @   sö  d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ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%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ G dd„ deƒZ,G dd„ de,ƒZ-G dd„ deƒZ.G dd„ deƒZ/dddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@d@dAdBdCdDdEdFdGdHdIdJdKdLdMdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdkdldmdndodkdkdpdqdrd)dsdtdudvdwdxdydzd{d|d}d~dd€d<d�d@d@d‚d�dƒd„d�d…dJd†d‡dˆd‰dŠd‹dUdŒd�dŽd�d�d‘d’d“d”d•d–d—d˜d™dšd›dœd�œ•Z0G dždŸ„ dŸeƒZ1G d d¡„ d¡eƒZ2G d¢d£„ d£eƒZ3G d¤d¥„ d¥eƒZ4d¦d§d¨d©dªd«d¬d­d®d¯d°d±d²d³œZ5d´dµd¶d·d¸d¹dºd»d¼œZ6G d½d¾„ d¾eƒZ7G d¿dÀ„ dÀe7ƒZ8G dÁdÂ„ dÂe8ƒZ9G dÃdÄ„ dÄe8ƒZ:G dÅdÆ„ dÆe8ƒZ;G dÇdÈ„ dÈe8ƒZ<G dÉdÊ„ dÊeƒZ=dËdÌdÍœZ>G dÎdÏ„ dÏeƒZ?G dÐdÑ„ dÑe?ƒZ@G dÒdÓ„ dÓeƒZAd¦d§d¨d©dªd«d¬d­d®d¯d°dÔœZBG dÕdÖ„ dÖeƒZCd×dØdÙdÚdÛdÜdÝdÞdßœZDG dàdá„ dáeƒZEG dâdã„ dãeEƒZFdädådædçœZGdèdédêdëdìœZHG dídî„ dîeEƒZIdïdð„ ZJG dñdò„ dòeEƒZKdódŽiZLG dôdõ„ dõeEƒZMG död÷„ d÷eEƒZNdødùdúdûdüdýœZOG dþdÿ„ dÿeEƒZPG �d �d„ �deCƒZQG �d�d„ �deCƒZRG �d�d„ �deCƒZSG �d�d„ �deCƒZTG �d�d	„ �d	eCƒZUG �d
�d„ �deUƒZV�d�d�d�dœZWG �d�d„ �deƒZXG �d�d„ �deXƒZYG �d�d„ �deXƒZZ�d�d�d�d�dœZ[G �d�d„ �deƒZ\G �d�d„ �de\ƒZ]ee-e/�d�d � eee-�d!�d � eee,�d"�d � eee-�d!�d#� eee,�d"�d#� ee,e4d�d$� ee1e4ƒ ee2e4ƒ ee4e�d%�d#� ee4e�d&�d#� ee4e�d'�d#� ee4e\�d(�d#� ee4e=�d)�d#� ee4eA�d*�d#� ee4eC�d+�d#� ee4eX�d,�d#� eee=�d)�d � eeeA�d*�d � eee4�d-�d#� ej^ _ee4¡ ej^ _ee1¡ ej^ _ee,¡ ej^ _ee2¡ dS (.  z+
PPP (Point to Point Protocol)

[RFC 1661]
é    N)Úconf)ÚDLT_PPPÚDLT_PPP_SERIALÚDLT_PPP_ETHERÚDLT_PPP_WITH_DIR)Úorb)ÚPacketÚbind_layers)ÚEAP)ÚEtherÚCookedLinuxÚGRE_PPTP)ÚIP)ÚIPv6)ÚBitFieldÚByteEnumFieldÚ	ByteFieldÚConditionalFieldÚ	EnumFieldÚFieldLenFieldÚIPFieldÚIntFieldÚOUIFieldÚPacketFieldÚPacketListFieldÚShortEnumFieldÚ
ShortFieldÚStrLenFieldÚ
XByteFieldÚXShortFieldÚXStrLenField)Úsixc                   @   sN   e Zd ZdZedddƒedddƒeddddiƒed	dƒed
dƒgZdd„ Z	dS )ÚPPPoEzPPP over EthernetÚversioné   é   ÚtypeÚcoder   ÚSessionÚ	sessionidÚlenNc                 C   sF   ||7 }| j d u rBt |ƒd }|d d… t d|¡ |dd …  }|S )Né   r%   ú!H)r*   ÚstructÚpack)ÚselfÚpÚpayZtmp_len© r2   úG/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/ppp.pyÚ
post_build4   s
    
$zPPPoE.post_build)
Ú__name__Ú
__module__Ú__qualname__Únamer   r   r   r   Úfields_descr4   r2   r2   r2   r3   r"   ,   s   

ür"   c                
   @   sj   e Zd ZdZdddddddd	d
dœ	ZedddƒedddƒeddeƒeddƒeddƒgZ	dd„ Z
dd„ ZdS )ÚPPPoEDzPPP over Ethernet DiscoveryzPPP Session Stagez(PPPoE Active Discovery Initiation (PADI)z#PPPoE Active Discovery Offer (PADO)z+PPPoE Active Discovery Session-Grant (PADG)z5PPPoE Active Discovery Session-Credit Response (PADC)z%PPPoE Active Discovery Quality (PADQ)z%PPPoE Active Discovery Request (PADR)z2PPPoE Active Discovery Session-confirmation (PADS)z'PPPoE Active Discovery Terminate (PADT))	r   é	   é   é
   é   é   é   ée   é§   r#   r$   r%   r&   r'   r;   r)   r   r*   Nc                 C   s   |d | j … || j d … fS ©N©r*   ©r/   Úsr2   r2   r3   Úextract_paddingP   s    zPPPoED.extract_paddingc                 C   s
   |   d¡S )Nz%code%©Úsprintf©r/   r2   r2   r3   Ú	mysummaryS   s    zPPPoED.mysummary)r5   r6   r7   r8   Z	code_listr   r   r   r   r9   rG   rK   r2   r2   r2   r3   r:   =   s&   ø



ür:   c                   @   sh   e Zd ZdZdddddddd	d
dddddddœZeddeƒeddddd�edddd„ d�gZdd„ Z	dS )ÚPPPoETagz	PPPoE TagzEnd-Of-ListzService-NamezAC-Namez	Host-Uniqz	AC-CookiezVendor-SpecificZCreditsZMetricszSequence NumberzCredit Scale FactorzRelay-Session-IdzPPP-Max-PayloadzService-Name-ErrorzAC-System-ErrorzGeneric-Error)r   i  i  i  i  i  i  i  i  i	  i  i   é  i  é  Ztag_typeNÚtag_lenZ	tag_valueÚH)Ú	length_ofÚfmtÚ c                 C   s   | j S rC   )rO   ©Úpktr2   r2   r3   Ú<lambda>n   ó    zPPPoETag.<lambda>©Zlength_fromc                 C   s   d|fS ©NrS   r2   rE   r2   r2   r3   rG   q   s    zPPPoETag.extract_padding)
r5   r6   r7   r8   Útag_listr   r   r   r9   rG   r2   r2   r2   r3   rL   X   s,   ò
ýrL   c                   @   s&   e Zd ZdZeddeƒgZdd„ ZdS )ÚPPPoED_TagszPPPoE Tag ListrZ   Nc                 C   s    dd  dd„ | jD ƒ¡ tgfS )Nz
PPPoE Tagsz, c                 s   s   | ]}|  d ¡V  qdS )z
%tag_type%NrH   )Ú.0Úxr2   r2   r3   Ú	<genexpr>z   s   z(PPPoED_Tags.mysummary.<locals>.<genexpr>)ÚjoinrZ   r:   rJ   r2   r2   r3   rK   y   s
    ÿþzPPPoED_Tags.mysummary)r5   r6   r7   r8   r   rL   r9   rK   r2   r2   r2   r3   r[   u   s   r[   zPadding ProtocolzROHC small-CID [RFC3095]zROHC large-CID [RFC3095]zInternet Protocol version 4zOSI Network LayerzXerox NS IDPzDECnet Phase IVZ	Appletalkz
Novell IPXzVan Jacobson Compressed TCP/IPz Van Jacobson Uncompressed TCP/IPzBridging PDUzStream Protocol (ST-II)zBanyan Vinesz'reserved (until 1993) [Typo in RFC1172]zAppleTalk EDDPzAppleTalk SmartBufferedzMulti-Link [RFC1717]zNETBIOS FramingzCisco SystemszAscom Timeplexz-Fujitsu Link Backup and Load Balancing (LBLB)zDCA Remote Lanz)Serial Data Transport Protocol (PPP-SDTP)zSNA over 802.2ZSNAzIPv6 Header CompressionzKNX Bridging Data [ianp]zEncryption [Meyer]z"Individual Link Encryption [Meyer]z$Internet Protocol version 6 [Hinden]zPPP Muxing [RFC3153]z1Vendor-Specific Network Protocol (VSNP) [RFC3772]zRTP IPHC Full Header [RFC3544]z!RTP IPHC Compressed TCP [RFC3544]z%RTP IPHC Compressed Non TCP [RFC3544]z#RTP IPHC Compressed UDP 8 [RFC3544]z#RTP IPHC Compressed RTP 8 [RFC3544]zStampede BridgingzReserved [Fox]zMP+ Protocol [Smith]z#reserved (Control Escape) [RFC1661]z+reserved (compression inefficient [RFC1662]z!Reserved Until 20-Oct-2000 [IANA]zNTCITS IPI [Ungar]zreserved (PPP NLID)z.single link compression in multilink [RFC1962]zcompressed datagram [RFC1962]z"reserved (compression inefficient)z802.1d Hello PacketszIBM Source Routing BPDUzDEC LANBridge100 Spanning Treez!Cisco Discovery Protocol [Sastry]zNetcs Twin Routing [Korfmacher]z)STP - Scheduled Transfer Protocol [Segal]z*EDP - Extreme Discovery Protocol [Grosser]z3Optical Supervisory Channel Protocol (OSCP)[Prasad]ZLuxcomzSigma Network Systemsz'Apple Client Server Protocol [Ridenour]zMPLS Unicast [RFC3032]  zMPLS Multicast [RFC3032]z1IEEE p1284.4 standard - data packets [Batchelder]z-ETSI TETRA Network Protocol Type 1 [Nieminen]z-Multichannel Flow Treatment Protocol [McCann]z*RTP IPHC Compressed TCP No Delta [RFC3544]z RTP IPHC Context State [RFC3544]z$RTP IPHC Compressed UDP 16 [RFC3544]z$RTP IPHC Compressed RTP 16 [RFC3544]z,Cray Communications Control Protocol [Stage]z1CDPD Mobile Network Registration Protocol [Quick]z&Expand accelerator protocol [Rachmani]zODSICP NCP [Arvind]zDOCSIS DLL [Gaedtke]z,Cetacean Network Detection Protocol [Siller]zStacker LZS [Simpson]zRefTek Protocol [Banfill]zFibre Channel [Rajagopal]zEMIT Protocols [Eastham]z(Vendor-Specific Protocol (VSP) [RFC3772]z"Internet Protocol Control Protocolz"OSI Network Layer Control ProtocolzXerox NS IDP Control Protocolz DECnet Phase IV Control ProtocolzAppletalk Control ProtocolzNovell IPX Control ProtocolÚreservedzBridging NCPz Stream Protocol Control ProtocolzBanyan Vines Control Protocolzreserved (until 1993)zMulti-Link Control Protocolz NETBIOS Framing Control ProtocolzCisco Systems Control ProtocolzFujitsu LBLB Control Protocolz/DCA Remote Lan Network Control Protocol (RLNCP)z'Serial Data Control Protocol (PPP-SDCP)zSNA over 802.2 Control ProtocolzSNA Control Protocolz'IP6 Header Compression Control Protocolz$KNX Bridging Control Protocol [ianp]z#Encryption Control Protocol [Meyer]z3Individual Link Encryption Control Protocol [Meyer]zIPv6 Control Protovol [Hinden]z%PPP Muxing Control Protocol [RFC3153]z:Vendor-Specific Network Control Protocol (VSNCP) [RFC3772]z"Stampede Bridging Control ProtocolzMP+ Control Protocol [Smith]zNot Used - reserved [RFC1661]z#NTCITS IPI Control Protocol [Ungar]z6single link compression in multilink control [RFC1962]z&Compression Control Protocol [RFC1962]z)Cisco Discovery Protocol Control [Sastry]zSTP - Control Protocol [Segal]z7EDPCP - Extreme Discovery Protocol Ctrl Prtcl [Grosser]z/Apple Client Server Protocol Control [Ridenour]zMPLSCP [RFC3032]z5IEEE p1284.4 standard - Protocol Control [Batchelder]z+ETSI TETRA TNP1 Control Protocol [Nieminen]zLink Control Protocolz Password Authentication ProtocolzLink Quality Reportz&Shiva Password Authentication Protocolz CallBack Control Protocol (CBCP)z4BACP Bandwidth Allocation Control Protocol [RFC2125]zBAP [RFC2125]z8Vendor-Specific Authentication Protocol (VSAP) [RFC3772]z Container Control Protocol [KEN]z+Challenge Handshake Authentication Protocolz&RSA Authentication Protocol [Narayana]z,Extensible Authentication Protocol [RFC2284]z0Mitsubishi Security Info Exch Ptcl (SIEP) [Seno]z(Stampede Bridging Authorization Protocolz)Proprietary Authentication Protocol [KEN]z/Proprietary Authentication Protocol [Tackabury]z1Proprietary Node ID Authentication Protocol [KEN])•r$   é   é   é!   é#   é%   é'   é)   é+   é-   é/   é1   é3   é5   é7   é9   é;   é=   é?   éA   éC   éE   éG   éI   éK   éM   éO   éQ   éS   éU   éW   éY   é[   éa   éc   rA   ég   éi   éo   éq   és   é}   é   é�   éƒ   éÁ   éÏ   éû   éý   éÿ   rM   rN   i  i  i	  i  i  i  i  i1  i3  i5  i�  iƒ  i…  i‡  i‰  ic   ie   ig   ii   i@  i@  i@  i@  i	@  i@  i!@  i#@  i%@  i'@  i[@  é!€  i#€  i%€  i'€  i)€  i+€  i-€  i/€  i1€  i3€  i5€  i7€  i9€  i;€  i=€  i?€  iA€  iC€  iE€  iG€  iI€  iK€  iM€  iO€  iQ€  éS€  iU€  iW€  iY€  i[€  io€  is€  iq€  i}€  i�€  iƒ€  iÁ€  iÏ€  iû€  iý€  iÿ€  i‚  i	‚  i‚  i‚  i5‚  i�‚  i…‚  i‡‚  i‰‚  é!À  é#À  é%À  i'À  i)À  i+À  i-À  i[À  i�À  é#Â  i%Â  é'Â  i)Â  ioÂ  i�Â  iƒÂ  i�Ä  c                   @   s    e Zd ZeddƒeddƒgZdS )ÚHDLCÚaddressr�   Úcontrolra   N)r5   r6   r7   r   r9   r2   r2   r2   r3   r˜     s   ÿr˜   c                   @   s   e Zd ZeddddgƒgZdS )ÚDIR_PPPÚ	directionr   ZreceivedÚsentN)r5   r6   r7   r   r9   r2   r2   r2   r3   r›     s   r›   c                       s,   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú_PPPProtoFieldz�
    A field that can be either Byte or Short, depending on the PPP RFC.

    See RFC 1661 section 2
    <https://tools.ietf.org/html/rfc1661#section-2>
    c                    sN   t |d d… ƒd@ r"d| _d| _nd| _d| _t | j¡| _tt| ƒ ||¡S )Nr$   ú!Br,   é   )ÚordrR   Úszr-   ÚStructÚsuperrž   Úgetfield)r/   rU   rF   ©Ú	__class__r2   r3   r¥   )  s    z_PPPProtoField.getfieldc                    sD   |dk rd| _ d| _nd| _ d| _t | j ¡| _tt| ƒ |||¡S )Né   rŸ   r$   r,   r    )rR   r¢   r-   r£   r¤   rž   Úaddfield)r/   rU   rF   Úvalr¦   r2   r3   r©   3  s    z_PPPProtoField.addfield)r5   r6   r7   Ú__doc__r¥   r©   Ú__classcell__r2   r2   r¦   r3   rž   "  s   
rž   c                   @   s,   e Zd ZdZeddeƒgZeddd„ƒZdS )ÚPPPzPPP Link LayerÚprotorc   Nc                 O   s   |r|d d… dkrt S | S )Nr$   ó   ÿ)r˜   )ÚclsÚ_pktÚargsÚkargsr2   r2   r3   Údispatch_hookB  s    zPPP.dispatch_hook)N)	r5   r6   r7   r8   rž   Ú_PPP_PROTOCOLSr9   Úclassmethodr´   r2   r2   r2   r3   r­   >  s   r­   zConfigure-RequestzConfigure-AckzConfigure-NakzConfigure-RejectzTerminate-RequestzTerminate-AckzCode-RejectzProtocol-RejectzEcho-Requestz
Echo-ReplyzDiscard-RequestzReset-Requestz	Reset-Ack)r$   r    ra   r%   rb   r+   r<   é   r;   r=   r>   é   é   zIP-Addresses (Deprecated)zIP-Compression-Protocolz
IP-AddresszMobile-IPv4zPrimary-DNS-AddresszPrimary-NBNS-AddresszSecondary-DNS-AddresszSecondary-NBNS-Address)r$   r    ra   r%   rŠ   é‚   r‹   é„   c                   @   sh   e Zd ZdZeddeƒedddddd„ d	�edd
dd„ d�gZdd„ Z	i Z
edd„ ƒZeddd„ƒZdS )ÚPPP_IPCP_OptionzPPP IPCP Optionr&   Nr*   ÚdataÚBc                 C   s   |d S ©Nr    r2   ©Ú_rª   r2   r2   r3   rV   l  rW   zPPP_IPCP_Option.<lambda>©rQ   rR   ÚadjustrS   c                 C   s   t d| jd ƒS ©Nr   r    ©Úmaxr*   rT   r2   r2   r3   rV   m  rW   rX   c                 C   s   d|fS ©NrW   r2   ©r/   r1   r2   r2   r3   rG   p  s    zPPP_IPCP_Option.extract_paddingc                 C   s   | | j | jj< d S rC   ©Úregistered_optionsr&   Údefault©r°   r2   r2   r3   Úregister_variantu  s    z PPP_IPCP_Option.register_variantc                 O   s"   |rt |d ƒ}| j || ¡S | S ©Nr   ©r   rÊ   Úget©r°   r±   r²   r³   Úor2   r2   r3   r´   y  s    zPPP_IPCP_Option.dispatch_hook)N)r5   r6   r7   r8   r   Ú_PPP_ipcpopttypesr   r   r9   rG   rÊ   r¶   rÍ   r´   r2   r2   r2   r3   r¼   g  s   

ÿü
r¼   c                   @   sJ   e Zd ZdZeddeƒedddddd	„ d
�eddƒedddd	„ d�gZ	dS )ÚPPP_IPCP_Option_IPAddresszPPP IPCP Option: IP Addressr&   ra   r*   Nr½   r¾   c                 C   s   |d S r¿   r2   rÀ   r2   r2   r3   rV   †  rW   z"PPP_IPCP_Option_IPAddress.<lambda>rÂ   z0.0.0.0ÚgarbagerS   c                 C   s
   | j d S ©Nr+   rD   rT   r2   r2   r3   rV   ˆ  rW   rX   )
r5   r6   r7   r8   r   rÓ   r   r   r   r9   r2   r2   r2   r3   rÔ   �  s   

ÿûrÔ   c                   @   s   e Zd ZdZdZdS )ÚPPP_IPCP_Option_DNS1zPPP IPCP Option: DNS1 AddressrŠ   N©r5   r6   r7   r8   r&   r2   r2   r2   r3   r×   Œ  s   r×   c                   @   s   e Zd ZdZdZdS )ÚPPP_IPCP_Option_DNS2zPPP IPCP Option: DNS2 Addressr‹   NrØ   r2   r2   r2   r3   rÙ   ‘  s   rÙ   c                   @   s   e Zd ZdZdZdS )ÚPPP_IPCP_Option_NBNS1zPPP IPCP Option: NBNS1 Addressrº   NrØ   r2   r2   r2   r3   rÚ   –  s   rÚ   c                   @   s   e Zd ZdZdZdS )ÚPPP_IPCP_Option_NBNS2zPPP IPCP Option: NBNS2 Addressr»   NrØ   r2   r2   r2   r3   rÛ   ›  s   rÛ   c                	   @   sH   e Zd Zeddeƒeddƒeddddd	d
„ d�edg edd
„ d�gZ	dS )ÚPPP_IPCPr'   r$   Úidr   r*   NrP   Úoptionsc                 C   s   |d S ©Nr%   r2   rÀ   r2   r2   r3   rV   ¥  rW   zPPP_IPCP.<lambda>©rR   rQ   rÃ   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   §  rW   rX   )
r5   r6   r7   r   Ú_PPP_conftypesr   r   r   r¼   r9   r2   r2   r2   r3   rÜ      s   

ÿÿûrÜ   ZOUIZDESE)r   r$   c                   @   sh   e Zd ZdZeddeƒedddddd„ d	�edd
dd„ d�gZdd„ Z	i Z
edd„ ƒZeddd„ƒZdS )ÚPPP_ECP_OptionzPPP ECP Optionr&   Nr*   r½   r¾   c                 C   s   |d S r¿   r2   rÀ   r2   r2   r3   rV   ¶  rW   zPPP_ECP_Option.<lambda>rÂ   rS   c                 C   s   t d| jd ƒS rÄ   rÅ   rT   r2   r2   r3   rV   ·  rW   rX   c                 C   s   d|fS rÇ   r2   rÈ   r2   r2   r3   rG   º  s    zPPP_ECP_Option.extract_paddingc                 C   s   | | j | jj< d S rC   rÉ   rÌ   r2   r2   r3   rÍ   ¿  s    zPPP_ECP_Option.register_variantc                 O   s"   |rt |d ƒ}| j || ¡S | S rÎ   rÏ   rÑ   r2   r2   r3   r´   Ã  s    zPPP_ECP_Option.dispatch_hook)N)r5   r6   r7   r8   r   Ú_PPP_ecpopttypesr   r   r9   rG   rÊ   r¶   rÍ   r´   r2   r2   r2   r3   râ   ±  s   

ÿü
râ   c                	   @   sN   e Zd Zeddeƒedddddd„ d	�ed
dƒeddƒedddd„ d�gZ	dS )ÚPPP_ECP_Option_OUIr&   r   r*   Nr½   r¾   c                 C   s   |d S rÖ   r2   rÀ   r2   r2   r3   rV   Ï  rW   zPPP_ECP_Option_OUI.<lambda>rÂ   ZouiÚsubtyperS   c                 C   s
   | j d S rÖ   rD   rT   r2   r2   r3   rV   Ò  rW   rX   )
r5   r6   r7   r   rã   r   r   r   r   r9   r2   r2   r2   r3   rä   Ë  s   

ÿúrä   c                	   @   sH   e Zd Zeddeƒeddƒeddddd	d
„ d�edg edd
„ d�gZ	dS )ÚPPP_ECPr'   r$   rÝ   r   r*   NrP   rÞ   c                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   Û  rW   zPPP_ECP.<lambda>rà   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   Ý  rW   rX   )
r5   r6   r7   r   rá   r   r   r   râ   r9   r2   r2   r2   r3   ræ   Ö  s   

ÿÿûræ   )r$   r    ra   r%   rb   r+   r<   r·   r;   r=   r>   c                	   @   sh   e Zd ZdZeddeƒeddƒedddd	d
d„ d�ed	ddd„ d�gZ	dd„ Z
dd„ Zeddd„ƒZdS )ÚPPP_LCPzPPP Link Control Protocolr'   rb   rÝ   r   r*   NrP   r½   c                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   ö  rW   zPPP_LCP.<lambda>rà   rS   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   ÷  rW   rX   c                 C   s
   |   d¡S )Nz
LCP %code%rH   rJ   r2   r2   r3   rK   ú  s    zPPP_LCP.mysummaryc                 C   s   d|fS rÇ   r2   rÈ   r2   r2   r3   rG   ý  s    zPPP_LCP.extract_paddingc                 O   s`   |r\t |d ƒ}|dv rtS |dv r(tS |dkr4tS |dkr@tS |dv rLtS |dkrXtS | S | S )Nr   ©r$   r    ra   r%   )rb   r+   r<   r·   )r;   r=   r>   )r   ÚPPP_LCP_ConfigureÚPPP_LCP_TerminateÚPPP_LCP_Code_RejectÚPPP_LCP_Protocol_RejectÚPPP_LCP_EchoÚPPP_LCP_Discard_RequestrÑ   r2   r2   r3   r´      s     zPPP_LCP.dispatch_hook)N)r5   r6   r7   r8   r   Ú_PPP_lcptypesr   r   r   r9   rK   rG   r¶   r´   r2   r2   r2   r3   rç   ð  s   

ÿûrç   zMaximum-Receive-UnitzAsync-Control-Character-MapzAuthentication-protocolzQuality-protocolzMagic-numberzProtocol-Field-Compressionz%Address-and-Control-Field-CompressionZCallback)r$   r    ra   r%   rb   r<   r·   é   c                   @   sh   e Zd ZdZeddeƒedddddd„ d	�eddd
d„ d�gZdd„ Z	i Z
edd„ ƒZeddd„ƒZdS )ÚPPP_LCP_OptionzPPP LCP Optionr&   Nr*   r¾   r½   c                 C   s   |d S r¿   r2   rÀ   r2   r2   r3   rV   $  rW   zPPP_LCP_Option.<lambda>rà   c                 C   s
   | j d S r¿   rD   rT   r2   r2   r3   rV   %  rW   rX   c                 C   s   d|fS rÇ   r2   rÈ   r2   r2   r3   rG   (  s    zPPP_LCP_Option.extract_paddingc                 C   s   | | j | jj< d S rC   rÉ   rÌ   r2   r2   r3   rÍ   -  s    zPPP_LCP_Option.register_variantc                 O   s"   |rt |d ƒ}| j || ¡S | S rÎ   rÏ   rÑ   r2   r2   r3   r´   1  s    zPPP_LCP_Option.dispatch_hook)N)r5   r6   r7   r8   r   Ú_PPP_lcp_optiontypesr   r   r9   rG   rÊ   r¶   rÍ   r´   r2   r2   r2   r3   rñ     s   

ÿü
rñ   c                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )ÚPPP_LCP_MRU_Optionr&   r$   r*   r%   Zmax_recv_unitiÜ  N)r5   r6   r7   r   rò   r   r   r9   r2   r2   r2   r3   ró   9  s   
þró   z Password authentication protocolz*Challenge-response authentication protocolz&PPP Extensible authentication protocol)r”   r–   r—   ÚMD5ÚSHA1zMS-CHAPz
MS-CHAP-v2)rb   r+   é€   rŠ   c                   @   s,   e Zd ZeddeƒeddƒedddƒgZdS )	ÚPPP_LCP_ACCM_Optionr&   r    r*   r+   Zaccmr   é    N)r5   r6   r7   r   rò   r   r   r9   r2   r2   r2   r3   r÷   M  s   

ýr÷   c                 C   s(   | j dkrdS | j dkrdS |d S d S )Nr–   rb   r”   r%   ©Úauth_protocol)rU   r]   r2   r2   r3   Úadjust_auth_lenU  s
    

rû   c                	   @   sb   e Zd Zeddeƒedddded�edd	eƒe	e
dd
dd„ d�dd„ ƒe	eddeƒdd„ ƒgZdS )ÚPPP_LCP_Auth_Protocol_Optionr&   ra   r*   Nr¾   r½   rà   rú   r”   rS   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   e  rW   z%PPP_LCP_Auth_Protocol_Option.<lambda>rX   c                 C   s
   | j dkS ©Nr–   rù   rT   r2   r2   r3   rV   f  rW   Ú	algorithmrb   c                 C   s
   | j dkS rý   rù   rT   r2   r2   r3   rV   j  rW   )r5   r6   r7   r   rò   r   rû   r   Ú_PPP_LCP_auth_protocolsr   r   Ú_PPP_LCP_CHAP_algorithmsr9   r2   r2   r2   r3   rü   ^  s   

ÿ
þ
þ÷rü   r•   c                   @   sH   e Zd Zeddeƒedddddd„ d	�ed
deƒedddd„ d�gZ	dS )ÚPPP_LCP_Quality_Protocol_Optionr&   r%   r*   Nr¾   r½   c                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   v  rW   z(PPP_LCP_Quality_Protocol_Option.<lambda>rà   Zquality_protocolr•   rS   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   x  rW   rX   )
r5   r6   r7   r   rò   r   r   Ú_PPP_LCP_quality_protocolsr   r9   r2   r2   r2   r3   r  r  s   

ÿ
ûr  c                   @   s*   e Zd ZeddeƒeddƒeddƒgZdS )ÚPPP_LCP_Magic_Number_Optionr&   rb   r*   r+   Úmagic_numberN)r5   r6   r7   r   rò   r   r   r9   r2   r2   r2   r3   r  |  s   
ýr  z*Location determined by user authenticationzDialing stringzLocation identifierzE.164 numberzDistinguished name)r   r$   r    ra   r%   c                   @   sH   e Zd Zeddeƒedddddd„ d	�ed
deƒedddd„ d�gZdS )ÚPPP_LCP_Callback_Optionr&   rð   r*   Nr¾   Úmessagec                 C   s   |d S ©Nra   r2   rÀ   r2   r2   r3   rV   ‘  rW   z PPP_LCP_Callback_Option.<lambda>rà   Z	operationr   rS   c                 C   s
   | j d S r  rD   rT   r2   r2   r3   rV   “  rW   rX   )	r5   r6   r7   r   rò   r   Ú_PPP_lcp_callback_operationsr   r9   r2   r2   r2   r3   r  �  s   

ÿ
ûr  c                	   @   sP   e Zd Zeddeƒeddƒeddddd	d
„ d�edg edd
„ d�gZ	dd„ Z
dS )ré   r'   r$   rÝ   r   r*   NrP   rÞ   c                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   œ  rW   zPPP_LCP_Configure.<lambda>rà   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   ž  rW   rX   c                 C   s*   t |tƒo(| jdv o(|jdko(|j| jkS )N)r    ra   r%   r$   )Ú
isinstanceré   r'   rÝ   ©r/   Úotherr2   r2   r3   Úanswers¡  s
    ÿ
þzPPP_LCP_Configure.answers)r5   r6   r7   r   rï   r   r   r   rñ   r9   r  r2   r2   r2   r3   ré   —  s   

ÿÿû	ré   c                   @   s   e Zd Zdd„ ZdS )rê   c                 C   s*   t |tƒo(| jdko(|jdko(|j| jkS )Nr+   rb   )r	  rê   r'   rÝ   r
  r2   r2   r3   r  ª  s
    ÿ
þzPPP_LCP_Terminate.answersN)r5   r6   r7   r  r2   r2   r2   r3   rê   ¨  s   rê   c                	   @   s@   e Zd Zeddeƒeddƒeddddd	d
„ d�eddeƒgZ	dS )rë   r'   r<   rÝ   r   r*   NrP   Zrejected_packetc                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   ¶  rW   zPPP_LCP_Code_Reject.<lambda>rà   )
r5   r6   r7   r   rï   r   r   r   rç   r9   r2   r2   r2   r3   rë   ±  s   

ÿ
ûrë   c                	   @   sJ   e Zd Zeddeƒeddƒeddddd	d
„ d�eddeƒe	dde
ƒgZdS )rì   r'   r·   rÝ   r   r*   NrP   Zrejected_informationc                 C   s   |d S rÖ   r2   rÀ   r2   r2   r3   rV   À  rW   z PPP_LCP_Protocol_Reject.<lambda>rà   Zrejected_protocol)r5   r6   r7   r   rï   r   r   r   rµ   r   r   r9   r2   r2   r2   r3   rì   »  s   

ÿ

úrì   c                	   @   sN   e Zd Zeddeƒeddƒeddddd	d
„ d�eddƒedddd
„ d�gZ	dS )rî   r'   r>   rÝ   r   r*   NrP   r½   c                 C   s   |d S ©Nr·   r2   rÀ   r2   r2   r3   rV   Ë  rW   z PPP_LCP_Discard_Request.<lambda>rà   r  rS   c                 C   s
   | j d S r  rD   rT   r2   r2   r3   rV   Í  rW   rX   )
r5   r6   r7   r   rï   r   r   r   r   r9   r2   r2   r2   r3   rî   Æ  s   

ÿúrî   c                   @   s   e Zd ZdZdd„ ZdS )rí   r;   c                 C   s*   t |tƒo(| jdko(|jdko(| j|jkS )Nr=   r;   )r	  rí   r'   rÝ   r
  r2   r2   r3   r  Ô  s
    ÿ
þzPPP_LCP_Echo.answersN)r5   r6   r7   r'   r  r2   r2   r2   r3   rí   Ñ  s   rí   zAuthenticate-RequestzAuthenticate-AckzAuthenticate-Nak)r$   r    ra   c                	   @   s`   e Zd ZdZeddeƒeddƒedddd	d
d„ d�ed	ddd„ d�gZ	e
ddd„ƒZdd„ ZdS )ÚPPP_PAPz$PPP Password Authentication Protocolr'   r$   rÝ   r   r*   Nr,   r½   c                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   é  rW   zPPP_PAP.<lambda>rà   rS   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   ê  rW   rX   c                 O   s^   d }|rt |d ƒ}n,d|v rB|d }t|tjƒrB| jd j| }|dkrNtS |dv rZtS | S )Nr   r'   r$   )r    ra   )r   r	  r!   Ústring_typesr9   Ús2iÚPPP_PAP_RequestÚPPP_PAP_Response©r°   r±   rÁ   r³   r'   r2   r2   r3   r´   í  s    zPPP_PAP.dispatch_hookc                 C   s   d|fS rY   r2   rÈ   r2   r2   r3   rG   ý  s    zPPP_PAP.extract_padding)N)r5   r6   r7   r8   r   Ú_PPP_paptypesr   r   r   r9   r¶   r´   rG   r2   r2   r2   r3   r  ã  s   

ÿûr  c                   @   sz   e Zd Zeddeƒeddƒeddddd	d
„ d�eddddd�edddd
„ d�eddddd�edddd
„ d�gZdd„ Z	dS )r  r'   r$   rÝ   r   r*   Nr,   Úusernamec                 C   s   |d t | jƒ S rÖ   )r*   Úpassword©rU   rª   r2   r2   r3   rV     rW   zPPP_PAP_Request.<lambda>rà   Úusername_lenr¾   ©rR   rQ   c                 C   s   | j S rC   )r  rT   r2   r2   r3   rV   	  rW   rX   Ú
passwd_lenr  c                 C   s   | j S rC   )r  rT   r2   r2   r3   rV     rW   c                 C   s
   |   d¡S )NzSPAP-Request username=%PPP_PAP_Request.username% password=%PPP_PAP_Request.password%rH   rJ   r2   r2   r3   rK     s    zPPP_PAP_Request.mysummary)
r5   r6   r7   r   r  r   r   r   r9   rK   r2   r2   r2   r3   r    s   

ÿÿ÷r  c                	   @   sd   e Zd Zeddeƒeddƒeddddd	d
„ d�eddddd�edddd
„ d�gZdd„ Z	dd„ Z
dS )r  r'   r    rÝ   r   r*   Nr,   r  c                 C   s   |d S ©Nrb   r2   rÀ   r2   r2   r3   rV     rW   zPPP_PAP_Response.<lambda>rà   Úmsg_lenr¾   r  rS   c                 C   s   | j S rC   )r  rT   r2   r2   r3   rV     rW   rX   c                 C   s   t |tƒo|j| jkS rC   )r	  r  rÝ   r
  r2   r2   r3   r    s    zPPP_PAP_Response.answersc                 C   s.   | j dkrdnd}| jdkr*||  d¡7 }|S )Nr    zPAP-AckzPAP-Nakr   z msg=%PPP_PAP_Response.message%)r'   r  rI   )r/   Úresr2   r2   r3   rK      s    
zPPP_PAP_Response.mysummary)r5   r6   r7   r   r  r   r   r   r9   r  rK   r2   r2   r2   r3   r    s   

ÿú	r  Z	ChallengeÚResponseZSuccessZFailurerè   c                	   @   sp   e Zd ZdZeddeƒeddƒedddd	d
d„ d�ed	ddd„ d�gZ	dd„ Z
eddd„ƒZdd„ Zdd„ ZdS )ÚPPP_CHAPz/PPP Challenge Handshake Authentication Protocolr'   r$   rÝ   r   r*   Nr,   r½   c                 C   s   |d S rß   r2   rÀ   r2   r2   r3   rV   5  rW   zPPP_CHAP.<lambda>rà   rS   c                 C   s
   | j d S rß   rD   rT   r2   r2   r3   rV   6  rW   rX   c                 C   s*   t |tƒo(|jdko(| jdv o(| j|jkS )Nr    )ra   r%   ©r	  ÚPPP_CHAP_ChallengeResponser'   rÝ   r
  r2   r2   r3   r  9  s    
ÿÿ
þzPPP_CHAP.answersc                 O   sR   d }|rt |d ƒ}n,d|v rB|d }t|tjƒrB| jd j| }|dv rNtS | S )Nr   r'   )r$   r    )r   r	  r!   r  r9   r  r!  r  r2   r2   r3   r´   >  s    zPPP_CHAP.dispatch_hookc                 C   s   d|fS rY   r2   rÈ   r2   r2   r3   rG   L  s    zPPP_CHAP.extract_paddingc                 C   s,   | j dkr|  d¡S | j dkr(|  d¡S d S )Nra   z$CHAP Success message=%PPP_CHAP.data%r%   z$CHAP Failure message=%PPP_CHAP.data%)r'   rI   rJ   r2   r2   r3   rK   O  s    


zPPP_CHAP.mysummary)N)r5   r6   r7   r8   r   Ú_PPP_chaptypesr   r   r   r9   r  r¶   r´   rG   rK   r2   r2   r2   r3   r  /  s   

ÿûr  c                
       s|   e Zd Zeddeƒeddƒeddddd	d
„ d�eddddd�edddd
„ d�edddd
„ d�gZ	dd„ Z
‡ fdd„Z‡  ZS )r!  r'   r$   rÝ   r   r*   Nr,   Úvaluec                 C   s   |t | jƒ d S r  )r*   Úoptional_namer  r2   r2   r3   rV   \  rW   z#PPP_CHAP_ChallengeResponse.<lambda>rà   Ú
value_sizer¾   r  s           c                 C   s   | j S rC   )r%  rT   r2   r2   r3   rV   `  rW   rX   r$  rS   c                 C   s   | j | j d S r  )r*   r%  rT   r2   r2   r3   rV   b  rW   c                 C   s*   t |tƒo(|jdko(| jdko(| j|jkS )Nr$   r    r   r
  r2   r2   r3   r  e  s    
ÿÿ
ÿz"PPP_CHAP_ChallengeResponse.answersc                    s:   | j dkr|  d¡S | j dkr(|  d¡S tt| ƒ ¡ S d S )Nr$   zlCHAP challenge=0x%PPP_CHAP_ChallengeResponse.value% optional_name=%PPP_CHAP_ChallengeResponse.optional_name%r    zkCHAP response=0x%PPP_CHAP_ChallengeResponse.value% optional_name=%PPP_CHAP_ChallengeResponse.optional_name%)r'   rI   r¤   r!  rK   rJ   r¦   r2   r3   rK   i  s    
ÿ
ÿz$PPP_CHAP_ChallengeResponse.mysummary)r5   r6   r7   r   r"  r   r   r    r   r9   r  rK   r¬   r2   r2   r¦   r3   r!  V  s    
þÿÿör!  r$   )r&   icˆ  idˆ  )r®   )r'   r—   rc   r~   r–   r‘   r’   r“   r”   iˆ  )`r«   r-   Zscapy.configr   Z
scapy.datar   r   r   r   Zscapy.compatr   Zscapy.packetr   r	   Zscapy.layers.eapr
   Zscapy.layers.l2r   r   r   Zscapy.layers.inetr   Zscapy.layers.inet6r   Zscapy.fieldsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    Z
scapy.libsr!   r"   r:   rL   r[   rµ   r˜   r›   rž   r­   rá   rÓ   r¼   rÔ   r×   rÙ   rÚ   rÛ   rÜ   rã   râ   rä   ræ   rï   rç   rò   rñ   ró   rÿ   r   r÷   rû   rü   r  r  r  r  r  ré   rê   rë   rì   rî   rí   r  r  r  r  r"  r  r!  Zl2typesÚregisterr2   r2   r2   r3   Ú<module>   sP  L€ ë ôøÿö%ù
ýü	
	û	
	
þý'"

