
    hvx                        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)  G d de          Z* G d de*          Z+ G d de          Z, G d de          Z-i 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.d/d0d1d2d3d4d5i d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWi dXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldkdmdndodpdqdrdsdtdudvdwdxi dydzd{d|d}d~ddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddÓddÓddƓddȓddʓdd̓ddÓddÓddГddғddԓdd=ddדddٓi ddۓddݓddߓddddddddddddddddddddcddddkddkddi dddddddd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ddddddddd d!d"d#d$Z. G d% d&e          Z/ G d' d(e          Z0 G d) d*e          Z1 G d+ d,e          Z2d-d.d/d0d1d2d3d4d5d6d7d8d9d:Z3d;d<d=d>d?d@dAdBdCZ4 G dD dEe          Z5 G dF dGe5          Z6 G dH dIe6          Z7 G dJ dKe6          Z8 G dL dMe6          Z9 G dN dOe6          Z: G dP dQe          Z;dRdSdTZ< G dU dVe          Z= G dW dXe=          Z> G dY dZe          Z?d-d.d/d0d1d2d3d4d5d6d7d[Z@ G d\ d]e          ZAd^d_d`dadbdcdddedfZB G dg dhe          ZC G di djeC          ZDdkdldmdnZEdodpdqdrdsZF G dt dueC          ZGdv ZH G dw dxeC          ZIddiZJ G dy dzeC          ZK G d{ d|eC          ZLd}d~ddddZM G d deC          ZN G d deA          ZO G d deA          ZP G d deA          ZQ G d deA          ZR G d deA          ZS G d deS          ZTddddZU G d de          ZV G d deV          ZW G d deV          ZXdddddZY G d de          ZZ G d deZ          Z[ ee+e-d            eee+d            eee*d            eee+d            eee*d            ee*e2d            ee/e2            ee0e2            ee2ed            ee2ed            ee2edP            ee2eZd            ee2e;d            ee2e?d            ee2eAd            ee2eVd            eee;d            eee?d            eee2d           ej\        ]                    ee2           ej\        ]                    ee/           ej\        ]                    ee*           ej\        ]                    ee0           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XStrLenFieldc                       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 Z	dS )PPPoEzPPP over Ethernetversion      typecoder   Session	sessionidlenNc                     ||z  }| j         =t          |          dz
  }|d d         t          j        d|          z   |dd          z   }|S )N   r&   !H)r+   structpack)selfppaytmp_lens       T/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/ppp.py
post_buildzPPPoE.post_build3   sR    	S8!ffqjG"1"D'222QqrrU:A    )
__name__
__module____qualname__namer   r   r    r   fields_descr6    r7   r5   r#   r#   +   s        D8Iq!,,8FAq)) =Q	N;;;{C00:eT**	,K    r7   r#   c            
           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 Z
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                 >    |d | j                  || j         d          fS Nr+   r1   ss     r5   extract_paddingzPPPoED.extract_paddingO   s!    $(|Qtxyy\))r7   c                 ,    |                      d          S )Nz%code%sprintfr1   s    r5   	mysummaryzPPPoED.mysummaryR   s    ||H%%%r7   )r8   r9   r:   r;   	code_listr   r   r    r   r<   rM   rR   r=   r7   r5   r?   r?   <   s        (D*A<DN>>K@B BI 8Iq!,,8FAq)) =y99;{C00:eT**	,K* * *& & & & &r7   r?   c                       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           eddd           gZd Z	dS )PPPoETagz	PPPoE TagzEnd-Of-ListzService-NamezAC-Namez	Host-Uniqz	AC-CookiezVendor-SpecificCredits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    tag_typeNtag_len	tag_valueH)	length_offmt c                     | j         S rI   )r[   pkts    r5   <lambda>zPPPoETag.<lambda>m   s    CK r7   length_fromc                 
    d|fS Nr`   r=   rK   s     r5   rM   zPPPoETag.extract_paddingp   s    1ur7   )
r8   r9   r:   r;   tag_listr   r   r   r<   rM   r=   r7   r5   rU   rU   W   s        D%&!##)!!)-*),)') )H" 	z422i#FFFK1G1GHHHK    r7   rU   c                   4    e Zd ZdZ edde          gZd ZdS )PPPoED_TagszPPPoE Tag Listri   Nc                 `    dd                     d | j        D                       z   t          gfS )Nz
PPPoE Tagsz, c              3   @   K   | ]}|                     d           V  dS )z
%tag_type%NrO   ).0xs     r5   	<genexpr>z(PPPoED_Tags.mysummary.<locals>.<genexpr>y   s?       (
 (
()AIIl##(
 (
 (
 (
 (
 (
r7   )joinri   r?   rQ   s    r5   rR   zPPPoED_Tags.mysummaryx   sG    dii (
 (
-1](
 (
 (
 
 
 
8 	r7   )r8   r9   r:   r;   r   rU   r<   rR   r=   r7   r5   rk   rk   t   s>        D"?:tX>>?K    r7   rk   r%   zPadding Protocol   zROHC small-CID [RFC3095]   zROHC large-CID [RFC3095]!   zInternet Protocol version 4#   zOSI Network Layer%   zXerox NS IDP'   zDECnet Phase IV)   	Appletalk+   z
Novell IPX-   zVan Jacobson Compressed TCP/IP/   z Van Jacobson Uncompressed TCP/IP1   zBridging PDU3   zStream Protocol (ST-II)5   zBanyan Vines7   z'reserved (until 1993) [Typo in RFC1172]9   zAppleTalk EDDP;   zAppleTalk SmartBuffered=   zMulti-Link [RFC1717]?   zNETBIOS FramingA   zCisco SystemsC   zAscom TimeplexE   z-Fujitsu Link Backup and Load Balancing (LBLB)G   zDCA Remote LanI   z)Serial Data Transport Protocol (PPP-SDTP)K   zSNA over 802.2M   SNAO   zIPv6 Header CompressionQ   zKNX Bridging Data [ianp]S   zEncryption [Meyer]U   z"Individual Link Encryption [Meyer]W   z$Internet Protocol version 6 [Hinden]Y   zPPP Muxing [RFC3153][   z1Vendor-Specific Network Protocol (VSNP) [RFC3772]a   zRTP IPHC Full Header [RFC3544]c   z!RTP IPHC Compressed TCP [RFC3544]rF   z%RTP IPHC Compressed Non TCP [RFC3544]g   z#RTP IPHC Compressed UDP 8 [RFC3544]i   z#RTP IPHC Compressed RTP 8 [RFC3544]o   zStampede Bridgingq   zReserved [Fox]s   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)rX   z802.1d Hello PacketsrY   zIBM Source Routing BPDUi  zDEC LANBridge100 Spanning Treei  z!Cisco Discovery Protocol [Sastry]i	  zNetcs Twin Routing [Korfmacher]i  z)STP - Scheduled Transfer Protocol [Segal]i  z*EDP - Extreme Discovery Protocol [Grosser]i  z3Optical Supervisory Channel Protocol (OSCP)[Prasad]i  i1  Luxcomi3  zSigma Network Systemsi5  z'Apple Client Server Protocol [Ridenour]i  zMPLS Unicast [RFC3032]  i  zMPLS Multicast [RFC3032]i  z1IEEE p1284.4 standard - data packets [Batchelder]i  z-ETSI TETRA Network Protocol Type 1 [Nieminen]i  z-Multichannel Flow Treatment Protocol [McCann]ic   z*RTP IPHC Compressed TCP No Delta [RFC3544]ie   z RTP IPHC Context State [RFC3544]ig   z$RTP IPHC Compressed UDP 16 [RFC3544]ii   z$RTP IPHC Compressed RTP 16 [RFC3544]i@  z,Cray Communications Control Protocol [Stage]i@  z1CDPD Mobile Network Registration Protocol [Quick]i@  z&Expand accelerator protocol [Rachmani]i@  zODSICP NCP [Arvind]i	@  zDOCSIS DLL [Gaedtke]i@  z,Cetacean Network Detection Protocol [Siller]i!@  zStacker LZS [Simpson]i#@  zRefTek Protocol [Banfill]i%@  zFibre Channel [Rajagopal]i'@  zEMIT Protocols [Eastham]i[@  z(Vendor-Specific Protocol (VSP) [RFC3772]i!  z"Internet Protocol Control Protocoli#  z"OSI Network Layer Control Protocoli%  zXerox NS IDP Control Protocoli'  z DECnet Phase IV Control Protocoli)  zAppletalk Control Protocoli+  zNovell IPX Control Protocoli-  reservedi/  i1  zBridging NCPi3  z Stream Protocol Control Protocoli5  zBanyan Vines Control Protocoli7  zreserved (until 1993)i9  i;  i=  zMulti-Link Control Protocoli?  z NETBIOS Framing Control ProtocoliA  zCisco Systems Control ProtocoliC  iE  zFujitsu LBLB Control ProtocoliG  z/DCA Remote Lan Network Control Protocol (RLNCP)iI  z'Serial Data Control Protocol (PPP-SDCP)iK  zSNA over 802.2 Control ProtocoliM  zSNA Control ProtocoliO  z'IP6 Header Compression Control ProtocoliQ  z$KNX Bridging Control Protocol [ianp]iS  z#Encryption Control Protocol [Meyer]iU  z3Individual Link Encryption Control Protocol [Meyer]iW  zIPv6 Control Protovol [Hinden]iY  z%PPP Muxing Control Protocol [RFC3153]i[  z:Vendor-Specific Network Control Protocol (VSNCP) [RFC3772]io  z"Stampede Bridging Control Protocolis  zMP+ Control Protocol [Smith]iq  i}  zNot Used - reserved [RFC1661]i  i  i  z#NTCITS IPI Control Protocol [Ungar]iπ  i  z6single link compression in multilink control [RFC1962]i  z&Compression Control Protocol [RFC1962]i  i  z)Cisco Discovery Protocol Control [Sastry]i	  i  zSTP - Control Protocol [Segal]i  z7EDPCP - Extreme Discovery Protocol Ctrl Prtcl [Grosser]i5  z/Apple Client Server Protocol Control [Ridenour]i  zMPLSCP [RFC3032]i  z5IEEE p1284.4 standard - Protocol Control [Batchelder]i  z+ETSI TETRA TNP1 Control Protocol [Nieminen]i  i!  zLink Control Protocol#  z Password Authentication Protocol%  zLink Quality Reporti'  z&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])i)  i+  i-  i[  i  #  i%  '  i)  io  i  i  i  c                   >    e Zd Z edd           edd          gZdS )HDLCaddressr   controlrr   N)r8   r9   r:   r   r<   r=   r7   r5   r   r     s3        :i..:i..0KKKr7   r   c                   .    e Zd Z eddddg          gZdS )DIR_PPP	directionr   receivedsentN)r8   r9   r:   r   r<   r=   r7   r5   r   r     s)         =a*f1EFFGKKKr7   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )_PPPProtoFielda  
    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>

    The generated proto field is two bytes when not specified, or when specified
    as an integer or a string:
      PPP()
      PPP(proto=0x21)
      PPP(proto="Internet Protocol version 4")
    To explicitly forge a one byte proto field, use the bytes representation:
      PPP(proto=b'!')
    c                     t          |d d                   dz  rd| _        d| _        nd| _        d| _        t          j        | j                  | _        t          t          |                               ||          S )Nr%   !Br.      )ordr_   szr/   Structsuperr   getfield)r1   rc   rL   	__class__s      r5   r   z_PPPProtoField.getfield0  so    q!u:: 	DHDGGDHDGmDH--^T**33C;;;r7   c                    t          |t                    rot          |          dk    rd\  }}n(t          |          dk    rd\  }}nt          d          t	          j        |                              |          d         }nd\  }}|| _        || _        t	          j        | j                  | _        t          t          |                               |||          S )Nr%   )r   r%   r   )r.   r   zInvalid length for PPP protor   )
isinstancebytesr+   	TypeErrorr/   r   unpackr_   r   r   r   addfield)r1   rc   rL   valr_   r   r   s         r5   r   z_PPPProtoField.addfield:  s    c5!! 		3xx1}}!RRSQ!RR >???-$$++C003CCGCmDH--^T**33CC@@@r7   )r8   r9   r:   __doc__r   r   __classcell__r   s   @r5   r   r   !  sd         < < < < <A A A A A A A A Ar7   r   c                   F    e Zd ZdZ edde          gZedd            ZdS )PPPzPPP Link Layerprotort   Nc                 4    |r|d d         dk    rt           S | S )Nr%      )r   )cls_pktargskargss       r5   dispatch_hookzPPP.dispatch_hookO  s&     	D!H''K
r7   rI   )	r8   r9   r:   r;   r   _PPP_PROTOCOLSr<   classmethodr   r=   r7   r5   r   r   K  sM        D!>'6>BBCK   [  r7   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   rr   r&   rs   r-   rA      r@   rB   rC         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   rr   r&   r      r      c                       e Zd ZdZ edde           eddddd            edd	d
           gZd Z	i Z
ed             Zedd            ZdS )PPP_IPCP_OptionzPPP IPCP Optionr'   Nr+   dataBc                     |dz   S Nr   r=   _r   s     r5   rd   zPPP_IPCP_Option.<lambda>y  
    C!G r7   r^   r_   adjustr`   c                 2    t          d| j        dz
            S Nr   r   maxr+   rb   s    r5   rd   zPPP_IPCP_Option.<lambda>z      Asw{8K8K r7   re   c                 
    d|fS Nr7   r=   r1   r3   s     r5   rM   zPPP_IPCP_Option.extract_padding}      Cxr7   c                 .    | | j         | j        j        <   d S rI   registered_optionsr'   defaultr   s    r5   register_variantz PPP_IPCP_Option.register_variant      36sx/000r7   c                 j    |r0t          |d                   }| j                            ||           S | S Nr   r   r   getr   r   r   r   os        r5   r   zPPP_IPCP_Option.dispatch_hook  7     	6DGA)--a555
r7   rI   )r8   r9   r:   r;   r   _PPP_ipcpopttypesr   r   r<   rM   r   r   r   r   r=   r7   r5   r   r   t  s        Dfd$566eTV33	5 	5 	5FB,K,KLLL	K   7 7 [7    [  r7   r   c                       e Zd ZdZ edde           eddddd 	           edd
           eddd           gZ	dS )PPP_IPCP_Option_IPAddresszPPP IPCP Option: IP Addressr'   rr   r+   Nr   r   c                     |dz   S r   r=   r   s     r5   rd   z"PPP_IPCP_Option_IPAddress.<lambda>  r   r7   r   z0.0.0.0garbager`   c                     | j         dz
  S Nr-   rJ   rb   s    r5   rd   z"PPP_IPCP_Option_IPAddress.<lambda>      37Q; r7   re   )
r8   r9   r:   r;   r   r   r   r   r   r<   r=   r7   r5   r   r     su        (Dfa!233eTV33	5 	5 	5	""Ir/F/FGGGKKKr7   r   c                       e Zd ZdZdZdS )PPP_IPCP_Option_DNS1zPPP IPCP Option: DNS1 Addressr   Nr8   r9   r:   r;   r'   r=   r7   r5   r  r            *DDDDr7   r  c                       e Zd ZdZdZdS )PPP_IPCP_Option_DNS2zPPP IPCP Option: DNS2 Addressr   Nr  r=   r7   r5   r  r    r  r7   r  c                       e Zd ZdZdZdS )PPP_IPCP_Option_NBNS1zPPP IPCP Option: NBNS1 Addressr   Nr  r=   r7   r5   r
  r
            +DDDDr7   r
  c                       e Zd ZdZdZdS )PPP_IPCP_Option_NBNS2zPPP IPCP Option: NBNS2 Addressr   Nr  r=   r7   r5   r  r    r  r7   r  c            	       ~    e Zd Z edde           edd           eddddd	 
           edg ed           gZ	dS )PPP_IPCPr(   r%   idr   r+   Nr]   optionsc                     |dz   S Nr&   r=   r   s     r5   rd   zPPP_IPCP.<lambda>  r   r7   r_   r^   r   c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_IPCP.<lambda>      ! r7   re   )
r8   r9   r:   r   _PPP_conftypesr   r   r   r   r<   r=   r7   r5   r  r    sw        fa00
4eTsi33	5 	5 	5	2$;$;	= 	= 	=KKKr7   r  OUIDESE)r   r%   c                       e Zd ZdZ edde           eddddd            edd	d
           gZd Z	i Z
ed             Zedd            ZdS )PPP_ECP_OptionzPPP ECP Optionr'   Nr+   r   r   c                     |dz   S r   r=   r   s     r5   rd   zPPP_ECP_Option.<lambda>  r   r7   r   r`   c                 2    t          d| j        dz
            S r   r   rb   s    r5   rd   zPPP_ECP_Option.<lambda>  r   r7   re   c                 
    d|fS r   r=   r   s     r5   rM   zPPP_ECP_Option.extract_padding  r   r7   c                 .    | | j         | j        j        <   d S rI   r   r   s    r5   r   zPPP_ECP_Option.register_variant  r   r7   c                 j    |r0t          |d                   }| j                            ||           S | S r   r   r   s        r5   r   zPPP_ECP_Option.dispatch_hook  r   r7   rI   )r8   r9   r:   r;   r   _PPP_ecpopttypesr   r   r<   rM   r   r   r   r   r=   r7   r5   r  r    s        Dfd$455eTV33	5 	5 	5FB,K,KLLL	K   7 7 [7    [  r7   r  c            	           e Zd Z edde           eddddd            ed	d           ed
d           eddd           gZ	dS )PPP_ECP_Option_OUIr'   r   r+   Nr   r   c                     |dz   S r  r=   r   s     r5   rd   zPPP_ECP_Option_OUI.<lambda>  r   r7   r   ouisubtyper`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_ECP_Option_OUI.<lambda>      ! r7   re   )
r8   r9   r:   r   r!  r   r   r   r   r<   r=   r7   r5   r#  r#    s        fa!122eTV33	5 	5 	5	)QFB,C,CDDDKKKr7   r#  c            	       ~    e Zd Z edde           edd           eddddd	 
           edg ed           gZ	dS )PPP_ECPr(   r%   r  r   r+   Nr]   r  c                     |dz   S r  r=   r   s     r5   rd   zPPP_ECP.<lambda>  r   r7   r  c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_ECP.<lambda>  r  r7   re   )
r8   r9   r:   r   r  r   r   r   r  r<   r=   r7   r5   r*  r*    sw        fa00
4eTsi33	5 	5 	5	2~$;$;	= 	= 	=KKKr7   r*  )r%   r   rr   r&   rs   r-   rA   r   r@   rB   rC   c            	           e Zd ZdZ edde           edd           edddd	d
            ed	dd           gZ	d Z
d Zedd            ZdS )PPP_LCPzPPP Link Control Protocolr(   rs   r  r   r+   Nr]   r   c                     |dz   S r  r=   r   s     r5   rd   zPPP_LCP.<lambda>  r   r7   r  r`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_LCP.<lambda>  r(  r7   re   c                 ,    |                      d          S )Nz
LCP %code%rO   rQ   s    r5   rR   zPPP_LCP.mysummary  s    ||L)))r7   c                 
    d|fS r   r=   r   s     r5   rM   zPPP_LCP.extract_padding
  r   r7   c                     |r_t          |d                   }|dv rt          S |dv rt          S |dk    rt          S |dk    rt          S |dv rt
          S |dk    rt          S | S | S )Nr   r%   r   rr   r&   )rs   r-   rA   r   )r@   rB   rC   )r   PPP_LCP_ConfigurePPP_LCP_TerminatePPP_LCP_Code_RejectPPP_LCP_Protocol_RejectPPP_LCP_EchoPPP_LCP_Discard_Requestr   s        r5   r   zPPP_LCP.dispatch_hook  s     	DGAL  ((f((a**a..g##b..

r7   rI   )r8   r9   r:   r;   r   _PPP_lcptypesr   r   r   r<   rR   rM   r   r   r=   r7   r5   r.  r.    s        &Dfa//
4eTsf33	5 	5 	5FB,C,CDDDK* * *      [  r7   r.  zMaximum-Receive-UnitzAsync-Control-Character-MapzAuthentication-protocolzQuality-protocolzMagic-numberzProtocol-Field-Compressionz%Address-and-Control-Field-CompressionCallback)r%   r   rr   r&   rs   rA   r      c                       e Zd ZdZ edde           eddddd            eddd	 
          gZd Z	i Z
ed             Zedd            ZdS )PPP_LCP_OptionzPPP LCP Optionr'   Nr+   r   r   c                     |dz   S r   r=   r   s     r5   rd   zPPP_LCP_Option.<lambda>1  r   r7   r  c                     | j         dz
  S r   rJ   rb   s    r5   rd   zPPP_LCP_Option.<lambda>2  s    #'A+ r7   re   c                 
    d|fS r   r=   r   s     r5   rM   zPPP_LCP_Option.extract_padding5  r   r7   c                 .    | | j         | j        j        <   d S rI   r   r   s    r5   r   zPPP_LCP_Option.register_variant:  r   r7   c                 j    |r0t          |d                   }| j                            ||           S | S r   r   r   s        r5   r   zPPP_LCP_Option.dispatch_hook>  r   r7   rI   )r8   r9   r:   r;   r   _PPP_lcp_optiontypesr   r   r<   rM   r   r   r   r   r=   r7   r5   r?  r?  ,  s        Dfd$899eTsf33	5 	5 	5FD.E.EFFF	K   7 7 [7    [  r7   r?  c                   V    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&   max_recv_uniti  N)r8   r9   r:   r   rE  r   r   r<   r=   r7   r5   rG  rG  F  sE         =,@AA9UA&&:ot446KKKr7   rG  z Password authentication protocolz*Challenge-response authentication protocolz&PPP Extensible authentication protocol)r   r   r   MD5SHA1zMS-CHAPz
MS-CHAP-v2)rs   r-      r   c                   X    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-   accmr       N)r8   r9   r:   r   rE  r   r   r<   r=   r7   r5   rM  rM  Z  sG        fa!566	%R((KKKr7   rM  c                 @    | j         dk    rdS | j         dk    rdS |dz   S )Nr   rs   r   r&   auth_protocol)rc   ro   s     r5   adjust_auth_lenrS  b  s1    
F""q		f	$	$q1ur7   c                       e Zd Z edde           edddde           edd	e           e	 e
dd
d           d            e	 edde          d           gZdS )PPP_LCP_Auth_Protocol_Optionr'   rr   r+   Nr   r   r  rR  r   r`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   z%PPP_LCP_Auth_Protocol_Option.<lambda>r  s    CGaK r7   re   c                     | j         dk    S Nr   rQ  rb   s    r5   rd   z%PPP_LCP_Auth_Protocol_Option.<lambda>s      )V3 r7   	algorithmrs   c                     | j         dk    S rX  rQ  rb   s    r5   rd   z%PPP_LCP_Auth_Protocol_Option.<lambda>w  rY  r7   )r8   r9   r:   r   rE  r   rS  r   _PPP_LCP_auth_protocolsr   r   _PPP_LCP_CHAP_algorithmsr<   r=   r7   r5   rU  rU  k  s        fa!566eTsf,	. 	. 	.0GHHK0G0GHHH33	
 	
 	M+q*BCC33	
 	
KKKr7   rU  c                   ~    e Zd Z edde           eddddd            ed	d
e           eddd           gZ	dS )PPP_LCP_Quality_Protocol_Optionr'   r&   r+   Nr   r   c                     |dz   S r  r=   r   s     r5   rd   z(PPP_LCP_Quality_Protocol_Option.<lambda>  r   r7   r  quality_protocolr   r`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   z(PPP_LCP_Quality_Protocol_Option.<lambda>  r(  r7   re   )
r8   r9   r:   r   rE  r   r   _PPP_LCP_quality_protocolsr   r<   r=   r7   r5   r_  r_    st        fa!566eTsf33	5 	5 	5)63MNNFB,C,CDDDKKKr7   r_  c                   V    e Zd Z edde           edd           edd          gZdS )PPP_LCP_Magic_Number_Optionr'   rs   r+   r-   magic_numberN)r8   r9   r:   r   rE  r   r   r<   r=   r7   r5   re  re    sE        fa!566	%&&KKKr7   re  z*Location determined by user authenticationzDialing stringzLocation identifierzE.164 numberzDistinguished name)r   r%   r   rr   r&   c                   ~    e Zd Z edde           eddddd            ed	d
e           eddd           gZdS )PPP_LCP_Callback_Optionr'   r=  r+   Nr   messagec                     |dz   S Nrr   r=   r   s     r5   rd   z PPP_LCP_Callback_Option.<lambda>  r   r7   r  	operationr   r`   c                     | j         dz
  S rk  rJ   rb   s    r5   rd   z PPP_LCP_Callback_Option.<lambda>  r  r7   re   )	r8   r9   r:   r   rE  r   _PPP_lcp_callback_operationsr   r<   r=   r7   r5   rh  rh    ss        fb"677eTsi33	5 	5 	5k1&BCCIr/F/FGGGKKKr7   rh  c            	           e Zd Z edde           edd           eddddd	 
           edg ed           gZ	d Z
dS )r5  r(   r%   r  r   r+   Nr]   r  c                     |dz   S r  r=   r   s     r5   rd   zPPP_LCP_Configure.<lambda>  r   r7   r  c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_LCP_Configure.<lambda>  r  r7   re   c                 t    t          |t                    o#| j        dv o|j        dk    o|j        | j        k    S )N)r   rr   r&   r%   )r   r5  r(   r  r1   others     r5   answerszPPP_LCP_Configure.answers  sB    u/00 4TY)5K 4J!O4 %DG 3	
r7   )r8   r9   r:   r   r;  r   r   r   r?  r<   ru  r=   r7   r5   r5  r5    s        fa//
4eTsi33	5 	5 	5	2~$;$;	= 	= 	=K
 
 
 
 
r7   r5  c                       e Zd Zd ZdS )r6  c                 x    t          |t                    o%| j        dk    o|j        dk    o|j        | j        k    S )Nr-   rs   )r   r6  r(   r  rs  s     r5   ru  zPPP_LCP_Terminate.answers  sA    u/00 4TY!^ 4J!O4 %DG 3	
r7   N)r8   r9   r:   ru  r=   r7   r5   r6  r6    s#        
 
 
 
 
r7   r6  c            	       x    e Zd Z edde           edd           eddddd	 
           edde          gZ	dS )r7  r(   rA   r  r   r+   Nr]   rejected_packetc                     |dz   S r  r=   r   s     r5   rd   zPPP_LCP_Code_Reject.<lambda>  r   r7   r  )
r8   r9   r:   r   r;  r   r   r   r.  r<   r=   r7   r5   r7  r7    sj        fa//
4eTs6G33	5 	5 	5%tW55KKKr7   r7  c            	           e Zd Z edde           edd           eddddd	 
           edde           e	dde
          gZdS )r8  r(   r   r  r   r+   Nr]   rejected_informationc                     |dz   S r  r=   r   s     r5   rd   z PPP_LCP_Protocol_Reject.<lambda>  r   r7   r  rejected_protocol)r8   r9   r:   r   r;  r   r   r   r   r   r	   r<   r=   r7   r5   r8  r8    s|        fa//
4eTs6L33	5 	5 	5*D.AA*D&99KKKr7   r8  c            	           e Zd Z edde           edd           eddddd	 
           edd           eddd           gZ	dS )r:  r(   rC   r  r   r+   Nr]   r   c                     |dz   S Nr   r=   r   s     r5   rd   z PPP_LCP_Discard_Request.<lambda>  r   r7   r  rf  r`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   z PPP_LCP_Discard_Request.<lambda>  r(  r7   re   )
r8   r9   r:   r   r;  r   r   r   r   r<   r=   r7   r5   r:  r:    s~        fb-00
4eTsf33	5 	5 	5&&FB,C,CDDDKKKr7   r:  c                       e Zd ZdZd ZdS )r9  r@   c                 x    t          |t                    o%| j        dk    o|j        dk    o| j        |j        k    S )NrB   r@   )r   r9  r(   r  rs  s     r5   ru  zPPP_LCP_Echo.answers  s@    ul++ 4	R 4J!O4 $58 3	
r7   N)r8   r9   r:   r(   ru  r=   r7   r5   r9  r9    s(        D
 
 
 
 
r7   r9  zAuthenticate-RequestzAuthenticate-AckzAuthenticate-Nak)r%   r   rr   c            	           e Zd ZdZ edde           edd           edddd	d
            ed	dd           gZ	e
dd            Zd ZdS )PPP_PAPz$PPP Password Authentication Protocolr(   r%   r  r   r+   Nr.   r   c                     |dz   S r  r=   r   s     r5   rd   zPPP_PAP.<lambda>  r   r7   r  r`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_PAP.<lambda>  r(  r7   re   c                     d }|rt          |d                   }n9d|v r5|d         }t          |t                    r| j        d         j        |         }|dk    rt
          S |dv rt          S | S )Nr   r(   r%   )r   rr   )r   r   strr<   s2iPPP_PAP_RequestPPP_PAP_Responser   r   r   r   r(   s        r5   r   zPPP_PAP.dispatch_hook  s{     	4tAw<<DDu__=D$$$ 4q)-d3199""V^^##
r7   c                 
    d|fS rh   r=   r   s     r5   rM   zPPP_PAP.extract_padding
      3wr7   rI   )r8   r9   r:   r;   r   _PPP_paptypesr   r   r   r<   r   r   rM   r=   r7   r5   r  r    s        1Dfa//
4eTtv33	5 	5 	5FB,C,CDDDK    [    r7   r  c                       e Zd Z edde           edd           eddddd	 
           edddd           eddd            edddd           eddd           gZd Z	dS )r  r(   r%   r  r   r+   Nr.   usernamec                 6    |dz   t          | j                  z   S r  )r+   passwordrc   r   s     r5   rd   zPPP_PAP_Request.<lambda>  s    cAgCL8I8I.I r7   r  username_lenr   r_   r^   c                     | j         S rI   )r  rb   s    r5   rd   zPPP_PAP_Request.<lambda>  s	    C,< r7   re   
passwd_lenr  c                     | j         S rI   )r  rb   s    r5   rd   zPPP_PAP_Request.<lambda>  s    cn r7   c                 ,    |                      d          S )NzSPAP-Request username=%PPP_PAP_Request.username% password=%PPP_PAP_Request.password%rO   rQ   s    r5   rR   zPPP_PAP_Request.mysummary  s!    || C D D 	Dr7   )
r8   r9   r:   r   r  r   r   r   r<   rR   r=   r7   r5   r  r    s        fa//
4eTtzII	K 	K 	KndzJJJJ < <	> 	> 	>lDcZHHHJ2L2LMMM
KD D D D Dr7   r  c            	           e Zd Z edde           edd           eddddd	 
           edddd           eddd           gZd Z	d Z
dS )r  r(   r   r  r   r+   Nr.   ri  c                     |dz   S Nrs   r=   r   s     r5   rd   zPPP_PAP_Response.<lambda>%  r   r7   r  msg_lenr   r  r`   c                     | j         S rI   )r  rb   s    r5   rd   zPPP_PAP_Response.<lambda>'  s    3; r7   re   c                 L    t          |t                    o|j        | j        k    S rI   )r   r  r  rs  s     r5   ru  zPPP_PAP_Response.answers*  s     %11Ieh$'6IIr7   c                 j    | j         dk    rdnd}| j        dk    r||                     d          z  }|S )Nr   zPAP-AckzPAP-Nakr   z msg=%PPP_PAP_Response.message%)r(   r  rP   )r1   ress     r5   rR   zPPP_PAP_Response.mysummary-  s>    9>>iiy<!4<< ABBBC
r7   )r8   r9   r:   r   r  r   r   r   r<   ru  rR   r=   r7   r5   r  r     s        fa//
4eTty33	5 	5 	5i3)DDDIr/F/FGGGKJ J J    r7   r  	ChallengeResponseSuccessFailurer4  c            	           e Zd ZdZ edde           edd           edddd	d
            ed	dd           gZ	d Z
edd            Zd Zd ZdS )PPP_CHAPz/PPP Challenge Handshake Authentication Protocolr(   r%   r  r   r+   Nr.   r   c                     |dz   S r  r=   r   s     r5   rd   zPPP_CHAP.<lambda>B  r   r7   r  r`   c                     | j         dz
  S r  rJ   rb   s    r5   rd   zPPP_CHAP.<lambda>C  r(  r7   re   c                 t    t          |t                    o#|j        dk    o| j        dv o| j        |j        k    S )Nr   )rr   r&   r   PPP_CHAP_ChallengeResponser(   r  rs  s     r5   ru  zPPP_CHAP.answersF  sC    %!;<< $
a$$(I$7$58#	$r7   c                     d }|rt          |d                   }n9d|v r5|d         }t          |t                    r| j        d         j        |         }|dv rt
          S | S )Nr   r(   )r%   r   )r   r   r  r<   r  r  r  s        r5   r   zPPP_CHAP.dispatch_hookK  sl     	4tAw<<DDu__=D$$$ 4q)-d36>>--
r7   c                 
    d|fS rh   r=   r   s     r5   rM   zPPP_CHAP.extract_paddingY  r  r7   c                     | j         dk    r|                     d          S | j         dk    r|                     d          S d S )Nrr   z$CHAP Success message=%PPP_CHAP.data%r&   z$CHAP Failure message=%PPP_CHAP.data%)r(   rP   rQ   s    r5   rR   zPPP_CHAP.mysummary\  sE    9>><< FGGGY!^^<< FGGG ^r7   rI   )r8   r9   r:   r;   r   _PPP_chaptypesr   r   r   r<   ru  r   r   rM   rR   r=   r7   r5   r  r  <  s        <Dfa00
4eTtv33	5 	5 	5FB,C,CDDDK$ $ $
    [  H H H H Hr7   r  c            
            e Zd Z edde           edd           eddddd	 
           edddd           eddd            eddd           gZ	d Z
 fdZ xZS )r  r(   r%   r  r   r+   Nr.   valuec                 6    |t          | j                  z   dz   S r  )r+   optional_namer  s     r5   rd   z#PPP_CHAP_ChallengeResponse.<lambda>i  s    C#c.?*@*@$@1$D r7   r  
value_sizer   r  s           c                     | j         S rI   )r  rb   s    r5   rd   z#PPP_CHAP_ChallengeResponse.<lambda>m  s    S^ r7   re   r  r`   c                 &    | j         | j        z
  dz
  S r  )r+   r  rb   s    r5   rd   z#PPP_CHAP_ChallengeResponse.<lambda>o  s    CGcn,Dq,H r7   c                 x    t          |t                    o%|j        dk    o| j        dk    o| j        |j        k    S )Nr%   r   r  rs  s     r5   ru  z"PPP_CHAP_ChallengeResponse.answersr  sF    %!;<< K
aK$(INK7;w%(7J	Kr7   c                     | j         dk    r|                     d          S | j         dk    r|                     d          S t          t          |                                           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(   rP   r   r  rR   )r1   r   s    r5   rR   z$PPP_CHAP_ChallengeResponse.mysummaryv  sr    9>><<K   Y!^^<<K  
 3T::DDFFFr7   )r8   r9   r:   r   r  r   r   r!   r   r<   ru  rR   r   r   s   @r5   r  r  c  s        fa00
44TWDD	
 	
 	
 	lDcWEEEWA!;!;	= 	= 	=OR H H	J 	J 	JKK K KG G G G G G G G Gr7   r  )r'   ic  id  )r   )r(   r   r   i  )^r   r/   scapy.configr   
scapy.datar   r   r   r   scapy.compatr   scapy.packetr	   r
   scapy.layers.eapr   scapy.layers.l2r   r   r   scapy.layers.inetr   scapy.layers.inet6r   scapy.fieldsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r#   r?   rU   rk   r   r   r   r   r   r  r   r   r   r  r  r
  r  r  r!  r  r#  r*  r;  r.  rE  r?  rG  r\  r]  rM  rS  rU  rc  r_  re  rn  rh  r5  r6  r7  r8  r:  r9  r  r  r  r  r  r  r  l2typesregisterr=   r7   r5   <module>r     s.                            , , , , , , , ,             8 8 8 8 8 8 8 8 8 8             # # # # # #                                     *    F   "& & & & &U & & &6    v   :    &   V
V
&V &V )	V
 V NV V KV LV ,V .V NV %V NV 5V  !V" %#V V$ "%V& 'V( O)V* +V, ;-V. /V0 71V2 3V4 E5V6 %7V8 &9V:  ;V< 0=V> 2?V@ "AVB ?CVD ,EV V VF /GVH 3IVJ 1KVL 1MVN OVP QVR "SVT 1UVV 9WVX /YVZ /[V\  ]V^ !_V` <aVb +cVd 0eVf "gV V Vh %iVj ,kVl /mVn -oVp 7qVr 8sVt AuVv AwVx HyVz #{V| 5}V~ &V@ &AVB ?CVD ;EVF ;GVH 8IV V VJ .KVL 2MVN 2OVP :QVR ?SVT 4UVV !WVX "YVZ :[V\ #]V^ '_V` 'aVb &cVd 6eVf 0gVh 0iVj +kV V Vl .mVn (oVp )qVr JsVt JuVv NwVx .yVz +{V| #}V~ JV@ JAVB )CVD .EVF ,GVH IVJ +KVL =MV V VN 5OVP -QVR "SVT 5UVV 2WVX 1YVZ A[V\ ,]V^ 3_V` HaVb 0cVd *eVf gVh +iVj /kVl /mVn 1oV V Vp +qVr DsVt 4uVv +wVx 7yVz -{V| ,}V~ EV@ =AVB CVD CEVF 9GVH ;IVJ #KVL .MVN !OVP 4QV VR /BF.94:>67=?kV V Vr0 0 0 0 06 0 0 0H H H H Hf H H H'A 'A 'A 'A 'AY 'A 'A 'AT    &    )$$'($"&#"'%! & 41$%/0124 4     f   4           4   
    4   
    5   
    5   
    v    ! !     V   4           f    (##&'#!%"!&
( 
(" " " " "f " " "J 284-)7B&( (     V   46 6 6 6 6 6 6 6 /84   			      .         >   " %&;<     n       .    4        n   
 
 
 
 
 
 
 
"
 
 
 
 
 
 
 
    '       g       g   
 
 
 
 
* 
 
 
 +&&( (
    f   <D D D D Dg D D D$    w   , !   $H $H $H $H $Hv $H $H $HNG G G G G G G GD FKa ( ( ( ( E6 ' ' ' ' E5v & & & & Kv . . . . Kf - - - - E3Q     D#    GS    CF # # # # C6 " " " " CV $ $ $ $ C ( ( ( ( C ( ( ( ( C ' ' ' ' C ' ' ' ' C ' ' ' ' E8& ) ) ) ) E7 ( ( ( ( Hc ( ( ( (   gs # # #   nd + + +   mU + + +   & 0 0 0 0 0r7   