a
    kÄ#dvv  ã                À   @   sê  d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
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 ddlmZ ddlmZ ddlmZ dd	lm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#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=dd>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{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£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Ç„ dÇeƒ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%G dÐdÑ„ dÑe#ƒ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*G dÚdÛ„ dÛe#ƒ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/G dädå„ dåe#ƒZ0G dædç„ dçe#ƒZ1G dèdé„ dée#ƒZ2G dêdë„ dëe#ƒZ3G dìdí„ díe#ƒZ4G dîdï„ dïe#ƒZ5G dðdñ„ dñe#ƒZ6G dòdó„ dóe#ƒZ7G dôdõ„ dõe#ƒZ8G död÷„ d÷e#ƒZ9G dødù„ dùe#ƒ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>G �d�d„ �de#ƒZ?G �d�d„ �de#ƒZ@G �d�d„ �de#ƒZAG �d�d	„ �d	e#ƒZBG �d
�d„ �de#ƒZCG �d�d„ �de#ƒZDG �d�d„ �de#ƒZEG �d�d„ �de"ƒZFG �d�d„ �deFƒZGG �d�d„ �deFƒZH�d�d„ ZIG �d�d„ �deFƒZJG �d�d„ �de"ƒZKG �d�d„ �deKƒZLG �d�d„ �deKƒZMG �d �d!„ �d!eKƒZNG �d"�d#„ �d#eKƒZOG �d$�d%„ �d%eKƒZPG �d&�d'„ �d'eKƒZQG �d(�d)„ �d)eKƒZRG �d*�d+„ �d+eKƒZSG �d,�d-„ �d-eKƒZTG �d.�d/„ �d/eKƒZUG �d0�d1„ �d1eKƒZV�d2�d3�d4�d5�d6�d7�d8�d9�d:�d;�d<�d=�d>�d?�d@�dA�dB�dC�dD�dEœ�dF�dG�dH�dI�dJ�dK�dL�dMœ�dN�dO�dP�dQ�dRœ�dN�dS�dT�dU�dRœ�dV�dW�dX�dY�dZ�d[�d\d�d]�d^œ	�d_�d`�daœ�db�dc�ddddd�de�df�dg�dh�di�dj�dk�dl�dm�dnœ�do�dp�dq�dr�dsœ�dt�du�dv�dw�dx�dy�dz�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¢�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Ê�dË�dÌ�dÍ�dÎ�dÏ�dÐ�dÑ�dÒ�dÓ�dÔ�dÕ�dnœ�dÖ�d×�dØ�dÙ�dsœ�dÚ�dÛ�daœ�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öi�d÷�dø�dù�dú�dûœ�dü�dý�dþ�dÿ�d �d�d�d�dœ�d�d�d�dœ�d	œZWG �d
�d„ �de"ƒZXG �d�d„ �deXƒZYG �d�d„ �deXƒZZG �d�d„ �deXƒZ[G �d�d„ �deXƒZ\G �d�d„ �deXƒZ]G �d�d„ �deXƒZ^G �d�d„ �deƒZ_G �d�d„ �de!ƒZ`G �d�d„ �de!ƒZa�d�d�d �d!�d"�d#�d$�d%�d&�d'�d(�d)�d*�d+�d,�d-�d.�d/�d0�d1�dô�d2�d3�d4�d5�d6�d7�d8�d9�d:�d;�d<�d=�d>�d?�d@�dA�dA�dA�dA�dô�dô�dBœ*ZbG �dC�dD„ �dDeƒZceeec�dE�dF� eeec�dE�dG� eeec�dH�dF� eeec�dH�dG� eeec�dI�dF� eeec�dI�dG� e
eec�dE�dE�dJ� dS (K  zÊ
RADIUS (Remote Authentication Dial In User Service)

To disable Radius-EAP defragmentation (True by default), you can use::

    conf.contribs.setdefault("radius", {}).setdefault("auto-defrag", False)
é    N)ÚorbÚraw)ÚPacketÚPaddingÚbind_layersÚbind_bottom_up)Ú	ByteFieldÚByteEnumFieldÚIntFieldÚStrLenFieldÚXStrLenFieldÚXStrFixedLenFieldÚFieldLenFieldÚPacketLenFieldÚPacketListFieldÚIPFieldÚMultiEnumField)ÚUDP)ÚEAP)Úconf)ÚScapy_Exceptionz	User-NamezUser-PasswordzCHAP-PasswordzNAS-IP-AddresszNAS-PortzService-TypezFramed-ProtocolzFramed-IP-AddresszFramed-IP-NetmaskzFramed-Routingz	Filter-Idz
Framed-MTUzFramed-CompressionzLogin-IP-HostzLogin-ServicezLogin-TCP-PortZ
UnassignedzReply-MessagezCallback-NumberzCallback-IdzFramed-RoutezFramed-IPX-NetworkÚStateÚClassúVendor-SpecificzSession-TimeoutzIdle-TimeoutzTermination-ActionzCalled-Station-IdzCalling-Station-IdzNAS-IdentifierzProxy-StatezLogin-LAT-ServicezLogin-LAT-NodezLogin-LAT-GroupzFramed-AppleTalk-LinkzFramed-AppleTalk-NetworkzFramed-AppleTalk-ZonezAcct-Status-TypezAcct-Delay-TimezAcct-Input-OctetszAcct-Output-OctetszAcct-Session-IdzAcct-AuthenticzAcct-Session-TimezAcct-Input-PacketszAcct-Output-PacketszAcct-Terminate-CausezAcct-Multi-Session-IdzAcct-Link-CountzAcct-Input-GigawordszAcct-Output-GigawordszEvent-TimestampzEgress-VLANIDzIngress-FilterszEgress-VLAN-NamezUser-Priority-TablezCHAP-ChallengezNAS-Port-Typez
Port-LimitzLogin-LAT-PortzTunnel-TypezTunnel-Medium-TypezTunnel-Client-EndpointzTunnel-Server-EndpointzAcct-Tunnel-ConnectionzTunnel-PasswordzARAP-PasswordzARAP-FeatureszARAP-Zone-AccesszARAP-SecurityzARAP-Security-DatazPassword-RetryÚPromptzConnect-InfozConfiguration-TokenúEAP-MessagezMessage-AuthenticatorzTunnel-Private-Group-IDzTunnel-Assignment-IDzTunnel-PreferencezARAP-Challenge-ResponsezAcct-Interim-IntervalzAcct-Tunnel-Packets-LostzNAS-Port-IdzFramed-PoolZCUIzTunnel-Client-Auth-IDzTunnel-Server-Auth-IDzNAS-Filter-RulezOriginating-Line-InfozNAS-IPv6-AddresszFramed-Interface-IdzFramed-IPv6-PrefixzLogin-IPv6-HostzFramed-IPv6-RoutezFramed-IPv6-PoolzError-CausezEAP-Key-NamezDigest-ResponsezDigest-RealmzDigest-NoncezDigest-Response-AuthzDigest-NextnoncezDigest-Methodz
Digest-URIz
Digest-QopzDigest-AlgorithmzDigest-Entity-Body-HashzDigest-CNoncezDigest-Nonce-CountzDigest-UsernamezDigest-OpaquezDigest-Auth-ParamzDigest-AKA-AutszDigest-DomainzDigest-Stalez
Digest-HA1zSIP-AORzDelegated-IPv6-PrefixzMIP6-Feature-VectorzMIP6-Home-Link-PrefixzOperator-NamezLocation-InformationzLocation-DatazBasic-Location-Policy-RuleszExtended-Location-Policy-RuleszLocation-CapablezRequested-Location-InfozFramed-Management-ProtocolzManagement-Transport-ProtectionzManagement-Policy-IdzManagement-Privilege-LevelzPKM-SS-CertzPKM-CA-CertzPKM-Config-SettingszPKM-Cryptosuite-ListzPKM-SAIDzPKM-SA-DescriptorzPKM-Auth-KeyzDS-Lite-Tunnel-NamezMobile-Node-IdentifierzService-SelectionzPMIP6-Home-LMA-IPv6-AddresszPMIP6-Visited-LMA-IPv6-AddresszPMIP6-Home-LMA-IPv4-AddresszPMIP6-Visited-LMA-IPv4-AddresszPMIP6-Home-HN-PrefixzPMIP6-Visited-HN-PrefixzPMIP6-Home-Interface-IDzPMIP6-Visited-Interface-IDzPMIP6-Home-IPv4-HoAzPMIP6-Visited-IPv4-HoAzPMIP6-Home-DHCP4-Server-Addressz"PMIP6-Visited-DHCP4-Server-AddresszPMIP6-Home-DHCP6-Server-Addressz"PMIP6-Visited-DHCP6-Server-AddresszPMIP6-Home-IPv4-GatewayzPMIP6-Visited-IPv4-GatewayzEAP-Lower-LayerzGSS-Acceptor-Service-NamezGSS-Acceptor-Host-NamezGSS-Acceptor-Service-SpecificszGSS-Acceptor-Realm-NamezFramed-IPv6-AddresszDNS-Server-IPv6-AddresszRoute-IPv6-InformationzDelegated-IPv6-Prefix-PoolzStateful-IPv6-Address-PoolzIPv6-6rd-ConfigurationzAllowed-Called-Station-IdzEAP-Peer-IdzEAP-Server-IdzMobility-Domain-IdzPreauth-TimeoutzNetwork-Id-NamezEAPoL-AnnouncementzWLAN-HESSIDzWLAN-Venue-InfozWLAN-Venue-LanguagezWLAN-Venue-NamezWLAN-Reason-CodezWLAN-Pairwise-CipherzWLAN-Group-CipherzWLAN-AKM-SuitezWLAN-Group-Mgmt-CipherzWLAN-RF-Band)¿é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   é_   é`   éa   éb   éc   éd   ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   éq   ér   és   ét   éu   év   éw   éx   éy   éz   é{   é|   é}   é~   é   é€   é�   é‚   éƒ   é„   é…   é†   é‡   éˆ   é‰   éŠ   é‹   éŒ   é�   éŽ   é�   é�   é‘   é’   é“   é”   é•   é–   é—   é˜   é™   éš   é›   éœ   é�   éž   éŸ   é    é¡   é¢   é£   é¤   é¥   é¦   é§   é¨   é©   éª   é«   é¬   é­   é®   é¯   é°   é±   é²   é³   é´   éµ   é¶   é·   é¸   é¹   éº   é»   é¼   é½   é¾   é¿   c                   @   st   e Zd 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	i Z
edd„ ƒZeddd„ƒZdd„ Zdd„ ZdS )ÚRadiusAttributez{
    Implements a RADIUS attribute (RFC 2865). Every specific RADIUS attribute
    class should inherit from this one.
    zRadius AttributeÚtyper   ÚlenNÚvalueÚBc                 C   s   t | jƒd S ©Nr   ©rÝ   rÞ   ©ÚpktÚx© rå   úJ/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/radius.pyÚ<lambda>é   ó    zRadiusAttribute.<lambda>©ÚadjustÚ c                 C   s
   | j d S rà   ©rÝ   ©rã   rå   rå   ræ   rç   ê   rè   ©Zlength_fromc                 C   s*   t | dƒr| | j| j< n| | j| jj< dS )zI
        Registers the RADIUS attributes defined in this module.
        ÚvalN)ÚhasattrÚregistered_attributesrï   rÜ   Údefault)Úclsrå   rå   ræ   Úregister_variantï   s    
z RadiusAttribute.register_variantc                 O   s"   |rt |d ƒ}| j || ¡S | S )zM
        Returns the right RadiusAttribute class for the given data.
        r   )r   rñ   Úget)ró   Ú_pktÚargsZkargsZ	attr_typerå   rå   ræ   Údispatch_hookú   s    zRadiusAttribute.dispatch_hookc                 C   s>   | j }|d u r:t |ƒ}|d d… t d|¡ |dd …  }|S )Nr   ú!Br   ©rÝ   ÚstructÚpack©ÚselfÚpZpayÚlengthrå   rå   ræ   Ú
post_build  s
    $zRadiusAttribute.post_buildc                 C   s   t S ©N)r   )rþ   Ú_rå   rå   ræ   Úguess_payload_class  s    z#RadiusAttribute.guess_payload_class)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer	   Ú_radius_attribute_typesr   r   Úfields_descrñ   Úclassmethodrô   rø   r  r  rå   rå   rå   ræ   rÛ   ß   s   

ÿü


rÛ   c                       s,   e Zd ZdZdgZdZd	‡ fdd„	Z‡  ZS )
Ú_SpecificRadiusAttrza
    Class from which every "specific" RADIUS attribute defined in this module
    inherits.
    rï   Trë   Nr   c                    sl   t t| ƒj||||fi |¤Ž | j| jd< | jj d¡}t|ƒdk rVt	d 
| jj¡ƒ‚|d  dd¡| _d S ©NrÜ   ZRadiusAttr_r   zInvalid class name: {}r   r  ú-)Úsuperr  Ú__init__rï   ÚfieldsÚ	__class__r  ÚsplitrÝ   r   ÚformatÚreplacer	  ©rþ   rö   Zpost_transformÚ	_internalZ_underlayerr  Z
name_parts©r  rå   ræ   r    s    
üûÿz_SpecificRadiusAttr.__init__)rë   Nr   N)r  r  r  r  Ú	__slots__Úmatch_subclassr  Ú__classcell__rå   rå   r  ræ   r    s   r  c                   @   s.   e Zd ZdZeddeƒeddƒeddƒgZdS )	Ú_RadiusAttrIntValueúR
    Implements a RADIUS attribute which value field is 4 bytes long integer.
    rÜ   r    rÝ   r!   rÞ   r   N)	r  r  r  r  r	   r
  r   r
   r  rå   rå   rå   ræ   r  .  s
   
ýr  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_User_NameúRFC 2865r   N©r  r  r  r  rï   rå   rå   rå   ræ   r  :  s   r  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_NAS_Portr   r    Nr!  rå   rå   rå   ræ   r"  ?  s   r"  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Framed_MTUr   r'   Nr!  rå   rå   rå   ræ   r#  D  s   r#  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Login_TCP_Portr   r+   Nr!  rå   rå   rå   ræ   r$  I  s   r$  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Session_Timeoutr   r6   Nr!  rå   rå   rå   ræ   r%  N  s   r%  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Idle_Timeoutr   r7   Nr!  rå   rå   rå   ræ   r&  S  s   r&  c                   @   s   e Zd ZdZdZdS )Ú RadiusAttr_Framed_AppleTalk_Linkr   r@   Nr!  rå   rå   rå   ræ   r'  X  s   r'  c                   @   s   e Zd ZdZdZdS )Ú#RadiusAttr_Framed_AppleTalk_Networkr   rA   Nr!  rå   rå   rå   ræ   r(  ]  s   r(  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Delay_TimeúRFC 2866rD   Nr!  rå   rå   rå   ræ   r)  b  s   r)  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Input_Octetsr*  rE   Nr!  rå   rå   rå   ræ   r+  g  s   r+  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Output_Octetsr*  rF   Nr!  rå   rå   rå   ræ   r,  l  s   r,  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Session_Timer*  rI   Nr!  rå   rå   rå   ræ   r-  q  s   r-  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Input_Packetsr*  rJ   Nr!  rå   rå   rå   ræ   r.  v  s   r.  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Output_Packetsr*  rK   Nr!  rå   rå   rå   ræ   r/  {  s   r/  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Link_Countr*  rN   Nr!  rå   rå   rå   ræ   r0  €  s   r0  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Input_GigawordsúRFC 2869rO   Nr!  rå   rå   rå   ræ   r1  …  s   r1  c                   @   s   e Zd ZdZdZdS )Ú RadiusAttr_Acct_Output_Gigawordsr2  rP   Nr!  rå   rå   rå   ræ   r3  Š  s   r3  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Egress_VLANIDzRFC 4675rS   Nr!  rå   rå   rå   ræ   r4  �  s   r4  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Port_Limitr   rY   Nr!  rå   rå   rå   ræ   r5  ”  s   r5  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_ARAP_Securityr2  rd   Nr!  rå   rå   rå   ræ   r6  ™  s   r6  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Password_Retryr2  rf   Nr!  rå   rå   rå   ræ   r7  ž  s   r7  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Tunnel_PreferencezRFC 2868rn   Nr!  rå   rå   rå   ræ   r8  £  s   r8  c                   @   s   e Zd ZdZdZdS )Ú RadiusAttr_Acct_Interim_Intervalr2  rp   Nr!  rå   rå   rå   ræ   r9  ¨  s   r9  c                   @   s   e Zd ZdZdZdS )Ú#RadiusAttr_Acct_Tunnel_Packets_LostzRFC 2867rq   Nr!  rå   rå   rå   ræ   r:  ­  s   r:  c                   @   s   e Zd ZdZdZdS )Ú%RadiusAttr_Management_Privilege_LevelzRFC 5607r£   Nr!  rå   rå   rå   ræ   r;  ²  s   r;  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Mobility_Domain_IdúRFC 7268rÌ   Nr!  rå   rå   rå   ræ   r<  ·  s   r<  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Preauth_Timeoutr=  rÍ   Nr!  rå   rå   rå   ræ   r>  ¼  s   r>  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_WLAN_Venue_Infor=  rÑ   Nr!  rå   rå   rå   ræ   r?  Á  s   r?  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_WLAN_Reason_Coder=  rÔ   Nr!  rå   rå   rå   ræ   r@  Æ  s   r@  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_WLAN_Pairwise_Cipherr=  rÕ   Nr!  rå   rå   rå   ræ   rA  Ë  s   rA  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_WLAN_Group_Cipherr=  rÖ   Nr!  rå   rå   rå   ræ   rB  Ð  s   rB  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_WLAN_AKM_Suiter=  r×   Nr!  rå   rå   rå   ræ   rC  Õ  s   rC  c                   @   s   e Zd ZdZdZdS )Ú!RadiusAttr_WLAN_Group_Mgmt_Cipherr=  rØ   Nr!  rå   rå   rå   ræ   rD  Ú  s   rD  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_WLAN_RF_Bandr=  rÙ   Nr!  rå   rå   rå   ræ   rE  ß  s   rE  c                       sZ   e Zd ZdZdgZd‡ fdd„	Zedd	eƒed
ddddd„ d�e	dddd„ d�gZ
‡  ZS )Ú_RadiusAttrHexStringValzg
    Implements a RADIUS attribute which value field is a string that will be
    as a hex string.
    rï   rë   Nr   c                    sl   t t| ƒj||||fi |¤Ž | j| jd< | jj d¡}t|ƒdk rVt	d 
| jj¡ƒ‚|d  dd¡| _d S r  )r  rF  r  rï   r  r  r  r  rÝ   r   r  r  r	  r  r  rå   ræ   r  ð  s    
üûÿz _RadiusAttrHexStringVal.__init__rÜ   r3   rÝ   rÞ   rß   c                 C   s   t | jƒd S rà   rá   ©rÿ   rä   rå   rå   ræ   rç     rè   z _RadiusAttrHexStringVal.<lambda>ré   c                 C   s   | j r| j d S dS )Nr   r   rì   ©rÿ   rå   rå   ræ   rç   	  rè   rî   )rë   Nr   N)r  r  r  r  r  r  r	   r
  r   r   r  r  rå   rå   r  ræ   rF  è  s   
û÷rF  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_User_Passwordr   r   Nr!  rå   rå   rå   ræ   rI    s   rI  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Stater   r3   Nr!  rå   rå   rå   ræ   rJ    s   rJ  c                 C   sZ   t  d| j¡}|t  d| j¡7 }|t  d| j¡7 }d}| jD ]}|t|ƒ7 }q<|| | S )zA
    Pack RADIUS data prior computing the authentication MAC
    rù   ú!Hrè   )rû   rü   ÚcodeÚidrÝ   Ú
attributesr   )Úradius_packetÚpacked_req_authenticatorZ
packed_hdrZpacked_attrsÚattrrå   rå   ræ   Úprepare_packed_data  s    
rR  c                   @   sF   e Zd ZdZdZeddeƒeddddƒedd	d
d�gZ	e
dd„ ƒZdS )Ú RadiusAttr_Message_Authenticatorr2  rk   rÜ   r3   rÝ   r-   rÞ   rß   z                r+   )r   c                 C   s:   | t  }t|jd ƒ|_t| |ƒ}t ||tj¡}| 	¡ S )zm
        Computes the "Message-Authenticator" of a given RADIUS packet.
        (RFC 2869 - Page 33)
        r   )
rS  Ú	bytearrayrÝ   rÞ   rR  ÚhmacÚnewÚhashlibÚmd5Údigest)rO  rP  Úshared_secretrQ  ÚdataZradius_hmacrå   rå   ræ   Úcompute_message_authenticator6  s
    
z>RadiusAttr_Message_Authenticator.compute_message_authenticatorN)r  r  r  r  rï   r	   r
  r   r   r  Ústaticmethodr\  rå   rå   rå   ræ   rS  '  s   
üørS  c                   @   s4   e Zd ZdZdgZeddeƒeddƒeddƒgZ	d	S )
Ú_RadiusAttrIPv4AddrValzM
    Implements a RADIUS attribute which value field is an IPv4 address.
    rï   rÜ   r   rÝ   r!   rÞ   z0.0.0.0N)
r  r  r  r  r  r	   r
  r   r   r  rå   rå   rå   ræ   r^  J  s   
ýr^  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_NAS_IP_Addressr   r   Nr!  rå   rå   rå   ræ   r_  X  s   r_  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Framed_IP_Addressr   r#   Nr!  rå   rå   rå   ræ   r`  ]  s   r`  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Framed_IP_Netmaskr   r$   Nr!  rå   rå   rå   ræ   ra  b  s   ra  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Login_IP_Hostr   r)   Nr!  rå   rå   rå   ræ   rb  g  s   rb  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Framed_IPX_Networkr   r2   Nr!  rå   rå   rå   ræ   rc  l  s   rc  c                   @   s   e Zd ZdZdZdS )Ú&RadiusAttr_PMIP6_Home_LMA_IPv4_AddressúRFC 6572r°   Nr!  rå   rå   rå   ræ   rd  q  s   rd  c                   @   s   e Zd ZdZdZdS )Ú)RadiusAttr_PMIP6_Visited_LMA_IPv4_Addressre  r±   Nr!  rå   rå   rå   ræ   rf  v  s   rf  c                   @   s   e Zd ZdZdZdS )Ú*RadiusAttr_PMIP6_Home_DHCP4_Server_Addressre  r¸   Nr!  rå   rå   rå   ræ   rg  {  s   rg  c                   @   s   e Zd ZdZdZdS )Ú-RadiusAttr_PMIP6_Visited_DHCP4_Server_Addressre  r¹   Nr!  rå   rå   rå   ræ   rh  €  s   rh  c                   @   s   e Zd ZdZdZdS )Ú"RadiusAttr_PMIP6_Home_IPv4_Gatewayre  r¼   Nr!  rå   rå   rå   ræ   ri  …  s   ri  c                   @   s   e Zd ZdZdZdS )Ú%RadiusAttr_PMIP6_Visited_IPv4_Gatewayre  r½   Nr!  rå   rå   rå   ræ   rj  Š  s   rj  ZLoginZFramedzCallback LoginzCallback FramedZOutboundZAdministrativez
NAS PromptzAuthenticate OnlyzCallback NAS Promptz
Call CheckzCallback AdministrativeZVoiceZFaxzModem RelayzIAPP-RegisterzIAPP-AP-CheckzAuthorize OnlyzFramed-ManagementzAdditional-Authorization)r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   ZPPPZSLIPz'AppleTalk Remote Access Protocol (ARAP)z1Gandalf proprietary SingleLink/MultiLink protocolzXylogics proprietary IPX/SLIPzX.75 SynchronouszGPRS PDP Context)r   r   r   r   r    r!   r"   ÚNonezSend routing packetszListen for routing packetszSend and Listen)r   r   r   r   zVJ TCP/IP header compressionzIPX header compressionzStac-LZS compressionZTelnetZRloginz	TCP ClearzPortMaster (proprietary)ZLATzX25-PADz	X25-T3POSz=TCP Clear Quiet (suppresses any NAS-generated connect string))	r   r   r   r   r   r    r!   r"   r#   ZDefaultzRADIUS-Request)r   r   ZStartZStopzInterim-UpdatezAccounting-OnzAccounting-OffzTunnel-StartzTunnel-StopzTunnel-RejectzTunnel-Link-StartzTunnel-Link-StopzTunnel-Link-RejectZFailed)r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   ÚRADIUSZLocalZRemoteZDiameter)r   r   r   r   zUser RequestzLost CarrierzLost ServicezIdle TimeoutzSession TimeoutzAdmin ResetzAdmin Rebootz
Port Errorz	NAS ErrorzNAS Requestz
NAS RebootzPort UnneededzPort PreemptedzPort SuspendedzService UnavailableZCallbackz
User ErrorzHost RequestzSupplicant RestartzReauthentication FailurezPort ReinitializedzPort Administratively Disabledz
Lost Power)r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   ZAsyncZSyncz	ISDN SynczISDN Async V.120zISDN Async V.110ZVirtualZPIAFSzHDLC Clear ChannelzX.25zX.75zG.3 FaxzSDSL - Symmetric DSLzAADSL-CAP - Asymmetric DSL, Carrierless Amplitude Phase Modulationz.ADSL-DMT - Asymmetric DSL, Discrete Multi-Tonez#IDSL - ISDN Digital Subscriber LineZEthernetz.xDSL - Digital Subscriber Line of unknown typeZCablezWireles - OtherzWireless - IEEE 802.11z
Token-RingZFDDIzWireless - CDMA2000zWireless - UMTSzWireless - 1X-EVZIAPPzFTTP - Fiber to the PremiseszWireless - IEEE 802.16zWireless - IEEE 802.20zWireless - IEEE 802.22zPPPoA - PPP over ATMz$PPPoEoA - PPP over Ethernet over ATMz)PPPoEoE - PPP over Ethernet over Ethernetz(PPPoEoVLAN - PPP over Ethernet over VLANz2PPPoEoQinQ - PPP over Ethernet over IEEE 802.1QinQzxPON - Passive Optical NetworkzWireless - XGPz WiMAX Pre-Release 8 IWK Functionz'WIMAX-WIFI-IWK: WiMAX WIFI Interworkingz6WIMAX-SFF: Signaling Forwarding Function for LTE/3GPP2z*WIMAX-HA-LMA: WiMAX HA and or LMA functionzWIMAX-DHCP: WIMAX DHCP servicez'WIMAX-LBS: WiMAX location based servicezWIMAX-WVS: WiMAX voice service),r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   z(Point-to-Point Tunneling Protocol (PPTP)zLayer Two Forwarding (L2F)z#Layer Two Tunneling Protocol (L2TP)z(Ascend Tunnel Management Protocol (ATMP)z Virtual Tunneling Protocol (VTP)z0IP Authentication Header in the Tunnel-mode (AH)zIP-in-IP Encapsulation (IP-IP)z*Minimal IP-in-IP Encapsulation (MIN-IP-IP)z:IP Encapsulating Security Payload in the Tunnel-mode (ESP)z!Generic Route Encapsulation (GRE)zBay Dial Virtual Services (DVS)zIP-in-IP TunnelingzVirtual LANs (VLAN))r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   zIPv4 (IP version 4)zIPv6 (IP version 6)ZNSAPzHDLC (8-bit multidrop)zBBN 1822Z802zE.163 (POTS)zE.164 (SMDS, Frame Relay, ATM)zF.69 (Telex)zX.121 (X.25, Frame Relay)ZIPXZ	Appletalkz	Decnet IVzBanyan Vinez!E.164 with NSAP format subaddressz!Only allow access to default zonezUse zone filter inclusivelyzNot usedzUse zone filter exclusivelyzNo EchoZEchoz Residual Session Context RemovedzInvalid EAP Packet (Ignored)zUnsupported AttributezMissing AttributezNAS Identification MismatchzInvalid RequestzUnsupported ServicezUnsupported ExtensionzInvalid Attribute ValuezAdministratively ProhibitedzRequest Not Routable (Proxy)zSession Context Not FoundzSession Context Not RemovablezOther Proxy Processing ErrorzResources UnavailablezRequest Initiatedz&Multiple Session Selection UnsupportedzLocation-Info-RequiredzResponse Too Big)éÉ   éÊ   i‘  i’  i“  i”  i•  i–  i—  iõ  iö  i÷  iø  iù  iú  iû  iü  iý  iY  ZTADIGZREALMZE212ZICCÚReserved)rK   rL   rM   rN   éÿ   zRetransmission allowedZCIVIC_LOCATIONZGEO_LOCATIONZUSERS_LOCATIONZNAS_LOCATION)r   r   r   r#   ZSNMPz	Web-basedZNETCONFÚFTPZTFTPZSFTPZRCPZSCP)r   r   r   r   r    r!   r"   r#   zNo-ProtectionzIntegrity-Protectionz$Integrity-Confidentiality-Protection)r   r   r   )r!   r"   r%   r(   r*   r8   rC   rH   rL   rX   r[   r\   rc   rg   r€   r™   rœ   rž   r    r¡   c                	   @   s@   e Zd ZdZdgZeddeƒeddƒedde	dd	„ d
d�gZ
dS )Ú_RadiusAttrIntEnumValr  rï   rÜ   r!   rÝ   rÞ   r   c                 C   s   | j S r  )rÜ   rH  rå   rå   ræ   rç   Ò  rè   z_RadiusAttrIntEnumVal.<lambda>ÚI)Z
depends_onÚfmtN)r  r  r  r  r  r	   r
  r   r   Ú_radius_attrs_valuesr  rå   rå   rå   ræ   rr  Ä  s   
ûýrr  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Service_Typer   r!   Nr!  rå   rå   rå   ræ   rv  Ø  s   rv  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Framed_Protocolr   r"   Nr!  rå   rå   rå   ræ   rw  Ý  s   rw  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Status_Typer*  rC   Nr!  rå   rå   rå   ræ   rx  â  s   rx  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Authenticr*  rH   Nr!  rå   rå   rå   ræ   ry  ç  s   ry  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_Acct_Terminate_Causer*  rL   Nr!  rå   rå   rå   ræ   rz  ì  s   rz  c                   @   s   e Zd ZdZdZdS )ÚRadiusAttr_NAS_Port_Typer   rX   Nr!  rå   rå   rå   ræ   r{  ñ  s   r{  c                   @   s   e Zd ZdZdd„ ZdS )Ú_EAPPacketFieldzF
    Handles EAP-Message attribute value (the actual EAP packet).
    c                 C   s<   d }t  d|dd… ¡d }|dk r.t|ƒ}n
t |¡}|S )NrK  r   r   r   éþ   )rû   Úunpackr   r   Ú	raw_layer)rþ   rã   ÚmÚretZeap_packet_lenrå   rå   ræ   Úm2iû  s    

z_EAPPacketField.m2iN)r  r  r  r  r‚  rå   rå   rå   ræ   r|  ö  s   r|  c                   @   sT   e Zd ZdZdZdZeddeƒedddd	d
d„ d�e	dde
dd„ d�gZdd„ ZdS )ÚRadiusAttr_EAP_Messagez<
    Implements the "EAP-Message" attribute (RFC 3579).
    r   TrÜ   rj   rÝ   NrÞ   rß   c                 C   s   |d S rà   rå   râ   rå   rå   ræ   rç     rè   zRadiusAttr_EAP_Message.<lambda>ré   rë   c                 C   s
   | j d S rà   rì   rH  rå   rå   ræ   rç     rè   rî   c                 C   s®   t j di ¡ dd¡s|S t| jt jƒrª|}| jj}|rªt d|d d… ¡d dkrªt d|dd… ¡d }|st|S ||d|…  ||d …  }}|d	k r4t	|ƒ| _|S q4|S )
NZradiuszauto-defragTrù   r   r   rj   r   r}  )
r   Zcontribsrõ   Ú
isinstancerÞ   r  Úloadrû   r~  r   )rþ   Úsrä   Úbufr   rå   rå   ræ   Úpost_dissect  s     
z#RadiusAttr_EAP_Message.post_dissect)r  r  r  r  r	  r  r	   r
  r   r|  r   r  rˆ  rå   rå   rå   ræ   rƒ    s   
û÷rƒ  c                   @   sn   e Zd ZdZd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d„ d�edddd„ d�gZdS )ÚRadiusAttr_Vendor_SpecificzO
    Implements the "Vendor-Specific" attribute, as described in RFC 2865.
    r   TrÜ   r5   rÝ   NrÞ   rß   c                 C   s   t | jƒd S )Nr#   rá   râ   rå   rå   ræ   rç   :  rè   z#RadiusAttr_Vendor_Specific.<lambda>ré   Z	vendor_idr   Zvendor_typeÚ
vendor_lenc                 C   s   t | jƒd S rà   rá   rG  rå   rå   ræ   rç   C  rè   rë   c                 C   s
   | j d S rà   )rŠ  rH  rå   rå   ræ   rç   E  rè   rî   )r  r  r  r  r	  r  r	   r
  r   r
   r   r   r  rå   rå   rå   ræ   r‰  ,  s,   
ûûîr‰  zAccess-RequestzAccess-AcceptzAccess-RejectzAccounting-RequestzAccounting-Responsez*Accounting-Status (now Interim Accounting)zPassword-RequestzPassword-AckzPassword-RejectzAccounting-MessagezAccess-ChallengezStatus-Server (experimental)zStatus-Client (experimental)zResource-Free-RequestzResource-Free-ResponsezResource-Query-RequestzResource-Query-Responsez"Alternate-Resource-Reclaim-RequestzNAS-Reboot-RequestzNAS-Reboot-ResponsezNext-PasscodezNew-PinzTerminate-SessionzPassword-ExpiredzEvent-RequestzEvent-ResponsezDisconnect-RequestzDisconnect-ACKzDisconnect-NAKzCoA-RequestzCoA-ACKzCoA-NAKzIP-Address-AllocatezIP-Address-ReleasezProtocol-ErrorzExperimental Use)*r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rC   rD   rE   rF   rG   rH   rM   rN   rO   éú   éû   éü   éý   r}  rp  c                
   @   sj   e Zd ZdZdZeddeƒeddƒeddd	d
dd„ d�e	dddƒe
d	g edd„ d�gZdd„ Zdd„ ZdS )ÚRadiusz0
    Implements a RADIUS packet (RFC 2865).
    rl  rL  r   rM  r   rÝ   NrN  ÚHc                 C   s   t | jƒd S ©Nr/   )rÝ   rN  râ   rå   rå   ræ   rç   †  rè   zRadius.<lambda>ré   Zauthenticatorrë   r+   c                 C   s
   | j d S r‘  rì   rí   rå   rå   ræ   rç   �  rè   rî   c                 C   s    t | |ƒ}t || ¡}| ¡ S )zI
        Computes the authenticator field (RFC 2865 - Section 3)
        )rR  rW  rX  rY  )rþ   Zpacked_request_authrZ  r[  Z
radius_macrå   rå   ræ   Úcompute_authenticator‘  s    
zRadius.compute_authenticatorc                 C   sF   ||7 }| j }|d u rBt |ƒ}|d d… t d|¡ |dd …  }|S )Nr   rK  r   rú   rý   rå   rå   ræ   r  š  s    $zRadius.post_build)r  r  r  r  r	  r	   Ú_packet_codesr   r   r   r   rÛ   r  r’  r  rå   rå   rå   ræ   r�  x  s*   
û
üõ	r�  i  )Úsport)Údporti  i×  )r”  r•  )dr  rû   rW  rU  Zscapy.compatr   r   Zscapy.packetr   r   r   r   Zscapy.fieldsr   r	   r
   r   r   r   r   r   r   r   r   Zscapy.layers.inetr   Zscapy.layers.eapr   Zscapy.configr   Zscapy.errorr   r
  rÛ   r  r  r  r"  r#  r$  r%  r&  r'  r(  r)  r+  r,  r-  r.  r/  r0  r1  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r>  r?  r@  rA  rB  rC  rD  rE  rF  rI  rJ  rR  rS  r^  r_  r`  ra  rb  rc  rd  rf  rg  rh  ri  rj  ru  rr  rv  rw  rx  ry  rz  r{  r|  rƒ  r‰  r“  r�  rå   rå   rå   ræ   Ú<module>   sJ  4€ Á D1	%#
íùü
ü
÷þñü
éÔ2óñü
þíûÿü
øý€ € Ô  6%Ö.+