a
    kÄ#d\ç  ã                   @   sÂ  d Z ddlmZ ddlZddlZddlm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 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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 dd
l7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z> ddl?m@Z@mAZA ddlBmCZCmDZD ddlEmFZFmGZG ejH�r‚ddlImJZJ ddlKmLZLmMZM nd ZJ ZNZMeD Od¡ G dd„ deƒZPg d¢ZQg d¢ZRg d¢ZSg d¢ZTg d¢ZUg d¢ZVg d¢ZWg d¢ZXdddd d!œZYg d"¢ZZd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&¢Z\g d'¢Z]h d(£Z^d)d*„ Z_G d+d,„ d,eƒZ`G d-d.„ d.eƒZaG d/d0„ d0eƒZbd1d2d3d4d5d6d7d8d9d:d;d<d=d>d?œd@dAdBdCdDdEdFdGdHdIdJdKdLdMdNœdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^œd_d`daœd!œZcdbdcdddedfdgdhdidjdkœ	Zdg dl¢g dm¢dndngdodpggdqdrgdqdsggdtdugdvdvggddgdudtgggg dw¢gZeG dxdy„ dye>ƒZfG dzd{„ d{eƒZgG d|d}„ d}egƒZhG d~d„ deƒZig d€¢Zjd�d‚dƒd„d…d†d‡dˆd‰dŠd‹œ
ZkdŒd�dŽd�d�d‘d’d“d”d†d•d–œZlG d—d˜„ d˜eƒZmd™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¶œZnd·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅœZodÆdÇ„ en p¡ D ƒZqeq reo¡ dÈdÉ„ dÊdÉ„ fZsG dËdÌ„ dÌeƒZtG dÍdÎ„ dÎetƒZuG dÏdÐ„ dÐetƒZvG dÑdÒ„ dÒeƒZwG dÓdÔ„ dÔeƒZxG dÕdÖ„ dÖeƒZyG d×dØ„ dØetƒZzG dÙdÚ„ dÚeƒZ{G dÛdÜ„ dÜetƒZ|G dÝdÞ„ dÞeƒZ}G dßdà„ dàetƒZ~e~ dÁ¡ G dádâ„ dâetƒZ€G dãdä„ däetƒZ�G dådæ„ dæe�ƒZ‚G dçdè„ dèemƒZƒG dédê„ dêeƒZ„G dëdì„ dìeƒZ…G dídî„ dîemƒZ†G dïdð„ dðemƒZ‡G dñdò„ dòemƒZˆG dódô„ dôe‡ƒZ‰G dõdö„ döemƒZŠG d÷dø„ døemƒZ‹G dùdú„ dúemƒ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’eebeh�dd»�d� eegei�d�d	�d
� eePegƒ eege=�d�d� eeie=ƒ eege†dd�d� eege‡d·d�d� eegeˆ�dd�d� eege‰d¸d�d� eegeŠd¹d�d� eege‹�dd�d� eegeƒ�dd�d� eege„�dd�d� eege…�dd�d� eegeŒ�dd�d� eege��d	d�d� eegeŽ�dd·�d� eeƒetƒ ee†etƒ ee‡etƒ eeˆetƒ ee‰etƒ eeŠetƒ ee‹etƒ eeŒetƒ eetetƒ ee‘ej“ƒ ee’ej“ƒ ej” •eeg¡ ej” –�deg¡ ej” •eeP¡ ej” –�deP¡ ej” •eeb¡ ej” –�deb¡ G �d�d„ �de8ƒZ—e j˜e�eƒg7  _˜G �d�d„ �de:ƒZ™dS (  z‰
Wireless LAN according to IEEE 802.11.

This file contains bindings for 802.11 layers and some usual linklayers:
  - PRISM
  - RadioTap
é    )Úprint_functionN)Úcrc32)ÚconfÚcrypto_validator)Ú	ETHER_ANYÚDLT_IEEE802_11ÚDLT_PRISM_HEADERÚDLT_IEEE802_11_RADIO)ÚrawÚ	plain_strÚorbÚchb)ÚPacketÚbind_layersÚbind_top_downÚ	NoPayload)ÚBitEnumFieldÚBitFieldÚBitMultiEnumFieldÚByteEnumFieldÚ	ByteFieldÚConditionalFieldÚFCSFieldÚFieldLenFieldÚFieldListFieldÚ
FlagsFieldÚIntFieldÚLEFieldLenFieldÚ
LEIntFieldÚLELongFieldÚLEShortEnumFieldÚLEShortFieldÚLESignedIntFieldÚMultipleTypeFieldÚOUIFieldÚPacketFieldÚPacketListFieldÚReversePadFieldÚScalingFieldÚ
ShortFieldÚStrFieldÚStrFixedLenFieldÚStrLenFieldÚ
XByteFieldÚXStrFixedLenField)ÚAnsweringMachine)Ú
PacketList)ÚEtherÚLLCÚMACField)ÚIPÚTCP)ÚwarningÚlog_loading)ÚsniffÚsendp)Údefault_backend)ÚCipherÚ
algorithmszSCan't import python-cryptography v1.7+. Disabled WEP decryption/encryption. (Dot11)c                -   @   sz  e Zd ZdZdZeddƒeddƒeddd	ƒed
dƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒeddƒed dƒed!dƒed"dƒed#dƒed$dƒed%dƒed&dƒed'dƒed(dƒed)dƒed*dƒed+dƒed,dƒed-dƒed.dƒed/dƒed0dƒed1dƒed2dƒg+Z	d3d4„ Z
d5S )6ÚPrismHeaderz iwpriv wlan0 monitor 3 zPrism headerZmsgcodeéD   Úlené�   ÚdevÚ é   Zhosttime_didr   Zhosttime_statusZhosttime_lenZhosttimeZmactime_didZmactime_statusZmactime_lenZmactimeZchannel_didZchannel_statusZchannel_lenÚchannelZrssi_didZrssi_statusZrssi_lenZrssiZsq_didZ	sq_statusZsq_lenÚsqZ
signal_didZsignal_statusZ
signal_lenÚsignalZ	noise_didZnoise_statusZ	noise_lenÚnoiseZrate_didZrate_statusZrate_lenÚrateZistx_didZistx_statusZistx_lenZistxZ
frmlen_didZfrmlen_statusZ
frmlen_lenZfrmlenc                 C   s(   t |tƒr| j |j¡S | j |¡S d S ©N)Ú
isinstancer=   ÚpayloadÚanswers©ÚselfÚother© rP   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/dot11.pyrL   }   s    
zPrismHeader.answersN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   r+   r!   r"   Úfields_descrL   rP   rP   rP   rQ   r=   M   s^   
Ö-r=   ) ÚTSFTÚFlagsÚRateÚChannelZFHSSÚdBm_AntSignalÚdBm_AntNoiseÚLock_QualityZTX_AttenuationZdB_TX_AttenuationZdBm_TX_PowerÚAntennaZdB_AntSignalZdB_AntNoiseÚRXFlagsÚTXFlagsZb17Zb18ÚChannelPlusÚMCSÚA_MPDUÚVHTÚ	timestampÚHEÚHE_MUÚHE_MU_other_userZzero_length_psduÚL_SIGÚTLVZ
RadiotapNSZVendorNSÚExt)ÚCFPZShortPreambleZwepÚfragmentÚFCSÚpadZbadFCSZShortGI)Úres1Úres2Úres3Úres4ÚTurboÚCCKÚOFDMÚ2GHzÚ5GHzÚPassiveÚDynamic_CCK_OFDMÚGFSKÚGSMÚStaticTurboÚ10MHzÚ5MHz)rq   ZBAD_PLCPrr   )ZTX_FAILÚCTSÚRTSZNOACKZNOSEQZORDER)rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   Ú20MHzZ40MHz_ext_channel_aboveZ40MHz_ext_channel_belowÚres5Úres6Úres7Úres8Úres9)z32-bit_counterZAccuracyrq   rr   rs   rt   r„   r…   )ÚMCS_bandwidthÚ	MCS_indexÚguard_intervalÚ	HT_formatÚFEC_typeÚSTBC_streamsZNessZNess_MSBrƒ   Z40MHzzht40Mhz-zht40MHz+)r   é   é   é   )ZReport0SubframeZIs0SubframeZKnownLastSubframeZLastSubframeZCRCerrorZEOFsubframeZKnownEOFrq   rr   rs   rt   r„   r…   r†   r‡   Z80MHzZ160MHz)r   r�   r�   r‘   é   é   é   é   é   é	   é
   é   é   é   é   é   rC   é   é   é   é   é   é   é   é   é   )ÚSTBCÚTXOP_PS_NOT_ALLOWEDÚGuardIntervalÚSGINsysmDisÚLDPCextraOFDMÚ
BeamformedZ	BandwidthÚGroupIDÚ
PartialAIDrq   rr   rs   rt   r„   r…   r†   )r§   r¨   r©   rª   r«   r¬   rq   rr   >   ZNSTSzTx BeamformingzSpatial ConfigurationzSTA-IDrc   ZDCMZCodingzuser field positionc                    s6   |du s|j r2|j jr2t|ƒ|du ‰ ‡ fdd„S dS )z/Generates the next RadioTapExtendedPresenceMaskNc                     s   t | dˆ iŽS )NÚindex)ÚRadioTapExtendedPresenceMask)Úargs©ÚstrP   rQ   Ú<lambda>ã   ó    z&_next_radiotap_extpm.<locals>.<lambda>)Úpresentrl   r?   )ÚpktÚlstÚcurÚsrP   r²   rQ   Ú_next_radiotap_extpmß   s    r»   c                   @   sT   e Zd ZdZdZeddddd„ edd	ƒD ƒd
g ƒgZddd„Zdd„ Z	dd„ Z
dS )r°   a§  RadioTapExtendedPresenceMask should be instantiated by passing an
    `index=` kwarg, stating which place the item has in the list.

    Passing index will update the b[x] fields accordingly to the index.
      e.g.
       >>> a = RadioTapExtendedPresenceMask(present="b0+b12+b29+Ext")
       >>> b = RadioTapExtendedPresenceMask(index=1, present="b33+b45+b59+b62")
       >>> pkt = RadioTap(present="Ext", Ext=[a, b])
    zRadioTap Extended presence maskr¶   Néàÿÿÿc                 C   s   g | ]}d | ‘qS ©zb%srP   ©Ú.0ÚirP   rP   rQ   Ú
<listcomp>ó   rµ   z'RadioTapExtendedPresenceMask.<listcomp>r   é   rl   c                 K   s"   |   |¡ tj| |fi |¤Ž d S rI   )Ú_restart_indentationr   Ú__init__)rN   Ú_pktr¯   ÚkwargsrP   rP   rQ   rÄ   õ   s    
z%RadioTapExtendedPresenceMask.__init__c                    s2   |d ‰ ‡ fdd„t ddƒD ƒdg | jd _d S )Né    c                    s   g | ]}d |ˆ   ‘qS r½   rP   r¾   r²   rP   rQ   rÁ   û   rµ   zERadioTapExtendedPresenceMask._restart_indentation.<locals>.<listcomp>r   rÂ   rl   )ÚrangerW   Únames)rN   r¯   rP   r²   rQ   rÃ   ù   s    z1RadioTapExtendedPresenceMask._restart_indentationc                 C   s   t jS rI   )r   Zpadding_layer)rN   ÚpayrP   rP   rQ   Úguess_payload_classý   s    z0RadioTapExtendedPresenceMask.guess_payload_class)Nr   )rR   rS   rT   rU   rV   r   rÈ   rW   rÄ   rÃ   rË   rP   rP   rP   rQ   r°   ç   s   	ÿ
r°   c                   @   sš   e Zd Zeddeƒeddƒeeddƒdd„ ƒeeddƒd	d„ ƒeed
dƒdd„ ƒee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 )ÚRadioTapTLVÚtyper   ÚlengthNÚouic                 C   s
   | j dkS ©Né   ©rÍ   ©r·   rP   rP   rQ   r´   	  rµ   zRadioTapTLV.<lambda>Úsubtypec                 C   s
   | j dkS rÐ   rÒ   rÓ   rP   rP   rQ   r´     rµ   Zpresence_typec                 C   s
   | j dkS rÐ   rÒ   rÓ   rP   rP   rQ   r´     rµ   Úreservedc                 C   s
   | j dkS rÐ   rÒ   rÓ   rP   rP   rQ   r´     rµ   Údatarµ   c                 C   s   | j S rI   ©rÎ   rÓ   rP   rP   rQ   r´     rµ   ©Úlength_fromrp   c                 C   s   | j  d S ©Nr’   r×   rÓ   rP   rP   rQ   r´     rµ   c                 C   s^   | j d u r4|d d… t dt| jƒ¡ |dd …  }| jd u rV|dt| jƒ d  7 }|| S )Nr�   z<Hr’   ó    )rÎ   ÚstructÚpackr?   rÖ   rp   )rN   r·   rÊ   rP   rP   rQ   Ú
post_build  s
    
*
zRadioTapTLV.post_buildc                 C   s   d|fS ©NrB   rP   ©rN   rº   rP   rP   rQ   Úextract_padding#  s    zRadioTapTLV.extract_padding)rR   rS   rT   r    Ú_rt_presentr!   r   r$   r   r,   rW   rÞ   rá   rP   rP   rP   rQ   rÌ     s2   
þþþþÿërÌ   c                ?   @   sF  e Zd Zd ZddddœZeddƒeddƒedd	ƒed
d	deƒe	e
dg ed�dd„ ƒe	eeddƒdƒdd„ ƒe	edd	deƒdd„ ƒe	edddddd�dd„ ƒe	eeddƒdƒdd„ ƒe	edd	d eƒd!d„ ƒe	ed"dd#d$d%�d&d„ ƒe	ed'dd#d$d%�d(d„ ƒe	eed)dƒdƒd*d„ ƒe	ed+dƒd,d„ ƒe	eed-d	d eƒdƒd.d„ ƒe	eed/d	d eƒdƒd0d„ ƒe	eed1d	deƒd2ƒd3d„ ƒe	ed4dƒd5d„ ƒe	ed6dƒd7d„ ƒe	eed8d	deƒdƒd9d„ ƒe	ed:dd;ƒd<d„ ƒe	ed=ddƒd>d„ ƒe	ed?dd;d@dAdBœƒdCd„ ƒe	edDdd;dEdFdBœƒdGd„ ƒe	edHdd;dIdJdBœƒdKd„ ƒe	edLddeƒdMd„ ƒe	edNdƒdOd„ ƒe	eedPdƒd2ƒdQd„ ƒe	edRd	deƒdSd„ ƒe	eedTd	d eƒdƒdUd„ ƒe	edVd	deƒdWd„ ƒe	edXdeƒdYd„ ƒe	edZdd[d\�d]d„ ƒe	ed^dƒd_d„ ƒe	ed`dƒdad„ ƒe	eedbdƒdƒdcd„ ƒe	edddƒded„ ƒe	edfdd2dgdhdidjœƒdkd„ ƒe	edldd2ƒdmd„ ƒe	ednd	de ƒdod„ ƒe	eedpdƒdƒdqd„ ƒe	edrdƒdsd„ ƒe	edtdƒdud„ ƒe	edvdƒdwd„ ƒe	edxdƒdyd„ ƒe	edzdƒd{d„ ƒe	eed|dƒdƒd}d„ ƒe	ed~dƒdd„ ƒe	e!d€g ed�dƒd‚d„ dƒ�d„d„ ƒe	e!d…g ed�dƒd†d„ dƒ�d‡d„ ƒe	eedˆd‰ƒdƒdŠd„ ƒe	ed‹dŒƒd�d„ ƒe	edŽdƒd�d„ ƒe	ed�dd e"ƒd‘d„ ƒe	eed’dd d“d”gƒdƒd•d„ ƒe	ed–dd—d˜d™�dšd„ ƒe	ed›dd2d˜dœ�d�d„ ƒe	ee
džg e#ƒd2ƒdŸd„ ƒe$d d�d¡d„ dƒ�g;Z%d¢d£„ Z&d¤d¥„ Z'd¦d§„ Z(d	S )¨ÚRadioTap)ÚChannelFrequencyú2.4.3)ÚChannelPlusFlagsrå   )ÚChannelPlusNumberrå   )r[   ZChannelFlags2ZChannelNumberÚversionr   rp   r?   Nr¶   r¼   rl   )Znext_cls_cbc                 C   s   | j o| j jS rI   )r¶   rl   rÓ   rP   rP   rQ   r´   6  rµ   zRadioTap.<lambda>Zmac_timestampr–   c                 C   s   | j o| j jS rI   )r¶   rX   rÓ   rP   rP   rQ   r´   @  rµ   rY   iøÿÿÿc                 C   s   | j o| j jS rI   ©r¶   rY   rÓ   rP   rP   rQ   r´   D  rµ   rZ   g      à?ZMbpsÚB)ZscalingÚunitÚfmtc                 C   s   | j o| j jS rI   )r¶   rZ   rÓ   rP   rP   rQ   r´   I  rµ   rä   r�   c                 C   s   | j o| j jS rI   ©r¶   r[   rÓ   rP   rP   rQ   r´   P  rµ   ZChannelFlagséðÿÿÿc                 C   s   | j o| j jS rI   rí   rÓ   rP   rP   rQ   r´   S  rµ   r\   ZdBmÚb)rë   rì   c                 C   s   | j o| j jS rI   )r¶   r\   rÓ   rP   rP   rQ   r´   X  rµ   r]   c                 C   s   | j o| j jS rI   )r¶   r]   rÓ   rP   rP   rQ   r´   ]  rµ   r^   c                 C   s   | j o| j jS rI   )r¶   r^   rÓ   rP   rP   rQ   r´   d  rµ   r_   c                 C   s   | j o| j jS rI   )r¶   r_   rÓ   rP   rP   rQ   r´   h  rµ   r`   c                 C   s   | j o| j jS rI   )r¶   r`   rÓ   rP   rP   rQ   r´   o  rµ   ra   c                 C   s   | j o| j jS rI   )r¶   ra   rÓ   rP   rP   rQ   r´   v  rµ   ræ   r’   c                 C   s   | j o| j jS rI   ©r¶   rb   rÓ   rP   rP   rQ   r´   }  rµ   ZChannelPlusFrequencyc                 C   s   | j o| j jS rI   rð   rÓ   rP   rP   rQ   r´   €  rµ   rç   c                 C   s   | j o| j jS rI   rð   rÓ   rP   rP   rQ   r´   ƒ  rµ   ZknownMCSc                 C   s   | j o| j jS rI   ©r¶   rc   rÓ   rP   rP   rQ   r´   Š  rµ   ZNess_LSBr�   c                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   �  rµ   rŽ   c                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   �  rµ   r�   ZBCCZLDPC©r   r�   c                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   “  rµ   rŒ   ÚmixedZ
greenfieldc                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   –  rµ   r‹   ZLong_GIZShort_GIc                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   ™  rµ   r‰   c                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   œ  rµ   rŠ   c                 C   s   | j o| j jS rI   rñ   rÓ   rP   rP   rQ   r´   Ÿ  rµ   Z
A_MPDU_refc                 C   s   | j o| j jS rI   ©r¶   rd   rÓ   rP   rP   rQ   r´   ¦  rµ   ZA_MPDU_flagsc                 C   s   | j o| j jS rI   rô   rÓ   rP   rP   rQ   r´   ©  rµ   ZKnownVHTc                 C   s   | j o| j jS rI   ©r¶   re   rÓ   rP   rP   rQ   r´   °  rµ   Z
PresentVHTc                 C   s   | j o| j jS rI   rõ   rÓ   rP   rP   rQ   r´   ³  rµ   ZVHT_bandwidthc                 C   s   | j o| j jS rI   rõ   rÓ   rP   rP   rQ   r´   ¶  rµ   Zmcs_nssr“   r×   c                 C   s   | j o| j jS rI   rõ   rÓ   rP   rP   rQ   r´   ¹  rµ   r­   c                 C   s   | j o| j jS rI   rõ   rÓ   rP   rP   rQ   r´   ¼  rµ   r®   c                 C   s   | j o| j jS rI   rõ   rÓ   rP   rP   rQ   r´   ¿  rµ   rf   c                 C   s   | j o| j jS rI   ©r¶   rf   rÓ   rP   rP   rQ   r´   Æ  rµ   Zts_accuracyc                 C   s   | j o| j jS rI   rö   rÓ   rP   rP   rQ   r´   É  rµ   Zts_unitZmillisecondsÚmicrosecondsÚnanoseconds)r   r�   r�   c                 C   s   | j o| j jS rI   rö   rÓ   rP   rP   rQ   r´   Ï  rµ   Zts_positionc                 C   s   | j o| j jS rI   rö   rÓ   rP   rP   rQ   r´   Ò  rµ   Zts_flagsc                 C   s   | j o| j jS rI   rö   rÓ   rP   rP   rQ   r´   Õ  rµ   Zhe_data1c                 C   s   | j o| j jS rI   ©r¶   rg   rÓ   rP   rP   rQ   r´   Ü  rµ   Zhe_data2c                 C   s   | j o| j jS rI   rù   rÓ   rP   rP   rQ   r´   ß  rµ   Zhe_data3c                 C   s   | j o| j jS rI   rù   rÓ   rP   rP   rQ   r´   â  rµ   Zhe_data4c                 C   s   | j o| j jS rI   rù   rÓ   rP   rP   rQ   r´   å  rµ   Zhe_data5c                 C   s   | j o| j jS rI   rù   rÓ   rP   rP   rQ   r´   è  rµ   Zhe_data6c                 C   s   | j o| j jS rI   rù   rÓ   rP   rP   rQ   r´   ë  rµ   Zhemu_flags1c                 C   s   | j o| j jS rI   ©r¶   rh   rÓ   rP   rP   rQ   r´   ò  rµ   Zhemu_flags2c                 C   s   | j o| j jS rI   rú   rÓ   rP   rP   rQ   r´   õ  rµ   ZRU_channel1rB   c                 C   s   dS rÚ   rP   ©ÚxrP   rP   rQ   r´   ø  rµ   rØ   c                 C   s   | j o| j jS rI   rú   rÓ   rP   rP   rQ   r´   ù  rµ   ZRU_channel2c                 C   s   dS rÚ   rP   rû   rP   rP   rQ   r´   ü  rµ   c                 C   s   | j o| j jS rI   rú   rÓ   rP   rP   rQ   r´   ý  rµ   Zhemuou_per_user_1iÿ  c                 C   s   | j o| j jS rI   ©r¶   ri   rÓ   rP   rP   rQ   r´     rµ   Zhemuou_per_user_2é?   c                 C   s   | j o| j jS rI   rý   rÓ   rP   rP   rQ   r´     rµ   Zhemuou_per_user_positionc                 C   s   | j o| j jS rI   rý   rÓ   rP   rP   rQ   r´   
  rµ   Zhemuou_per_user_knownc                 C   s   | j o| j jS rI   rý   rÓ   rP   rP   rQ   r´     rµ   Z
lsig_data1rH   rÎ   c                 C   s   | j o| j jS rI   ©r¶   rj   rÓ   rP   rP   rQ   r´     rµ   Zlsig_lengthrš   éþÿÿÿ©Ztot_sizec                 C   s   | j o| j jS rI   rÿ   rÓ   rP   rP   rQ   r´     rµ   Z	lsig_rate©Zend_tot_sizec                 C   s   | j o| j jS rI   rÿ   rÓ   rP   rP   rQ   r´     rµ   Ztlvsc                 C   s   | j o| j jS rI   )r¶   rk   rÓ   rP   rP   rQ   r´   "  rµ   Ú
notdecodedc                 C   s   dS ©Nr   rP   rÓ   rP   rP   rQ   r´   %  rµ   c                 C   s   | j r| j jr| jjrtS tS rI   )r¶   rY   ro   ÚDot11FCSÚDot11©rN   rK   rP   rP   rQ   rË   (  s    zRadioTap.guess_payload_classc                 C   s8   t | jt| jƒ t|ƒ dƒ}|d |… | _||d … S r  )Úmaxr?   Úoriginalr  ©rN   rº   rÎ   rP   rP   rQ   Úpost_dissect-  s    zRadioTap.post_dissectc                 C   sD   | j d u r<|d d… t dt |ƒ¡d d d…  |dd …  }|| S )Nr�   z!Héÿÿÿÿr’   )r?   rÜ   rÝ   ©rN   ÚprÊ   rP   rP   rQ   rÞ   2  s    
2zRadioTap.post_build))rR   rS   rT   rV   Zdeprecated_fieldsr   r!   r   râ   r   r&   r»   r'   r   Ú	_rt_flagsr(   Ú_rt_channelflagsÚ_rt_rxflagsÚ_rt_txflagsÚ_rt_channelflags2Ú_rt_knownmcsr   r   Ú_rt_bandwidthr   Ú_rt_a_mpdu_flagsÚ_rt_knownvhtÚ_rt_presentvhtr   Ú_rt_vhtbandwidthr+   r)   Ú_rt_tsflagsr   Ú_rt_hemuother_per_user_knownrÌ   r,   rW   rË   r  rÞ   rP   rP   rP   rQ   rã   )  sD  ýþûþÿýþûþÿýÿýþûþþûþûþûþþþû
þ
þþþþþþþûþþûþ
þþþþþûþýû
þþþûþþþþþþûþÿýÿýþûþþÿýþûþþ
þû€ ‹ yrã   zAssociation RequestzAssociation ResponsezReassociation RequestzReassociation ResponsezProbe RequestzProbe ResponsezTiming AdvertisementZBeaconZATIMZDisassociationZAuthenticationZDeauthenticationÚActionzAction No Ack)r   r�   r�   r‘   r’   r“   r”   r–   r—   r˜   r™   rš   r›   rœ   ZTriggerZTACKzBeamforming Report PollzVHT/HE NDP AnnouncementzControl Frame ExtensionzControl WrapperzBlock Ack Requestz	Block AckzPS-Pollr‚   r�   ZAckzCF-EndzCF-End+CF-Ack)r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   ÚDatazData+CF-AckzData+CF-PollzData+CF-Ack+CF-PollzNull (no data)zCF-Ack (no data)zCF-Poll (no data)zCF-Ack+CF-Poll (no data)zQoS DatazQoS Data+CF-AckzQoS Data+CF-PollzQoS Data+CF-Ack+CF-PollzQoS Null (no data)zQoS CF-Poll (no data)zQoS CF-Ack+CF-Poll (no data))r   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   rœ   r�   z
DMG Beaconz
S1G Beaconrò   ZPollZSPRZGrantzDMG CTSzDMG DTSz	Grant AckZSSWzSSW-FeedbackzSSW-Ack)	r�   r‘   r’   r“   r”   r•   r–   r—   r˜   )úRA=DAúTA=SAz	BSSID/STAN)ÚRAÚTANNr  zRA=BSSIDr   r  zTA=BSSIDr!  ÚBSSIDZSAZDA)r"  NNNc                       s2   e Zd ZdZdgZ‡ fdd„Z‡ fdd„Z‡  ZS )Ú_Dot11MacFieldzU
    A MACField that displays the address type depending on the
    802.11 flags
    r¯   c                    s   || _ tt| ƒ ||¡ d S rI   )r¯   Úsuperr#  rÄ   )rN   rV   Údefaultr¯   ©Ú	__class__rP   rQ   rÄ   ¢  s    z_Dot11MacField.__init__c                    s2   t t| ƒ ||¡}| | j¡}|r.d||f S |S )Nz%s (%s))r$  r#  Úi2reprÚaddress_meaningr¯   )rN   r·   Úvalrº   Úmeaningr&  rP   rQ   r(  ¦  s
    z_Dot11MacField.i2repr)rR   rS   rT   rU   Ú	__slots__rÄ   r(  Ú__classcell__rP   rP   r&  rQ   r#  ›  s   r#  c                   @   s  e Zd ZdZedddedd„ ƒedddg d	¢ƒed
ddƒeeddde	ƒdd„ ƒe
edddg d¢ƒdd„ fgedddg d¢ƒƒeddƒededƒeededƒdd„ ƒeededƒdd„ ƒeeddƒdd„ ƒeededƒdd„ ƒgZdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd)d'd(„Zd&S )*r  z802.11rÔ   r   r’   c                 C   s   | j S rI   rÒ   rÓ   rP   rP   rQ   r´   ³  rµ   zDot11.<lambda>rÍ   r�   )Z
ManagementÚControlr  Ú	ExtensionÚprotoÚcfec                 C   s   | j | jfdkS ©N©r�   r”   ©rÍ   rÔ   rÓ   rP   rP   rQ   r´   ¹  rµ   ÚFCfield)úpw-mgtÚMDÚ	protectedÚorderc                 C   s   | j | jfdkS r2  r4  rÓ   rP   rP   rQ   r´   À  rµ   r–   )zto-DSúfrom-DSZMFÚretryr6  r7  r8  r9  ÚIDÚaddr1r�   Úaddr2c                 C   s   | j dkp| jdv S )Nr�   )	r’   r“   r”   r–   r—   r˜   r™   rœ   r�   r4  rÓ   rP   rP   rQ   r´   Ë  s   
Zaddr3r‘   c                 C   s$   | j dv p"| j | jfdko"| jdkS )N)r   r�   r3  r”   )rÍ   rÔ   r1  rÓ   rP   rP   rQ   r´   Ð  s   
ZSCc                 C   s
   | j dkS )Nr�   rÒ   rÓ   rP   rP   rQ   r´   Ó  rµ   Zaddr4c                 C   s   | j dko| jd@ dkS )Nr�   r‘   )rÍ   r5  rÓ   rP   rP   rQ   r´   Ö  s   
c                 C   s   |   d| jjfd  ¡S )Nz=802.11 %%%s.type%% %%%s.subtype%% %%%s.addr2%% > %%%s.addr1%%r’   )Úsprintfr'  rR   ©rN   rP   rP   rQ   Ú	mysummaryÛ  s    zDot11.mysummaryc                 C   sN   | j dkr2d| j  kr dkr2n n| jdkr2tS | jjr>tS t | |¡S d S )Nr�   r–   r�   r›   )rÍ   rÔ   ÚDot11QoSr5  r8  ÚDot11Encryptedr   rË   r  rP   rP   rQ   rË   ß  s    
ÿÿ
ÿzDot11.guess_payload_classc                 C   s¤   t |tƒr | jdkrl| j ¡ |j ¡ kr,dS |j| jfdv r@dS | j|j  krXdkr n q | j |j¡S n4| jdkrzdS | jdkr’| j |j¡S | jdkr dS dS )Nr   )rò   ©r�   r‘   )r’   r“   r�   r™   r�   r‘   )	rJ   r  rÍ   r=  Úlowerr>  rÔ   rK   rL   rM   rP   rP   rQ   rL   ë  s    




zDot11.answersc                 C   sÒ   |dvrt dƒ‚|d }| jdkr.td | S | jdkrj| j| jfdkr^| jdkr^g d¢| S td | S | jdkr¸td | | jj | jj }|r´|d	v r´t| j	t
ƒr´| j	jr´d
}|S | jdkrÎtd | S dS )zR
        Return the meaning of the address[index] considering the context
        )r�   r�   r‘   r’   z#Wrong index: should be [1, 2, 3, 4]r�   r   r3  r”   )r   zNAV-SAzNAV-DAr�   rD  r"  r‘   N)Ú
ValueErrorrÍ   Ú_dot11_addr_meaningrÔ   r1  r5  Zto_DSZfrom_DSrJ   rK   rB  ÚA_MSDU_Present)rN   r¯   r+  rP   rP   rQ   r)  ü  s.    



ÿþ
zDot11.address_meaningNc                 C   s|   | j d@ dkr|rtdƒ d S t| jjtƒr`|s6tjrB| j |¡ t| jjtƒr`|r\tdƒ d S |  j dM  _ | jj| _d S )Né@   r   zNo WEP to removez,Dot11 can't be decrypted. Check conf.wepkey.i¿ÿÿÿ)r5  r6   rJ   rK   r   r   ÚwepkeyÚdecrypt)rN   ÚkeyÚwarnrP   rP   rQ   Úunwep  s    
zDot11.unwep)Nr�   )rR   rS   rT   rV   r   Ú_dot11_subtypesr   r   r   Ú
_dot11_cfer#   r   r)   r#  r   r!   rW   rA  rË   rL   r)  rN  rP   rP   rP   rQ   r  ¯  sT   
ÿ
þÿýÿÿø

þ
þ
þÝ*r  c                   @   s:   e Zd ZdZdZejedddd�g Zdd„ Zd	d
„ Z	dS )r  z
802.11-FCSTÚfcsNú<I)rì   c                 C   s   t  dt|ƒd@ ¡d d d… S )Nú!Iì   ÿÿ r  )rÜ   rÝ   r   rà   rP   rP   rQ   Úcompute_fcs,  s    zDot11FCS.compute_fcsc                 C   s4   ||7 }| j d u r0|d d… |  |d d… ¡ }|S )Néüÿÿÿ)rQ  rU  r  rP   rP   rQ   rÞ   /  s    
zDot11FCS.post_build)
rR   rS   rT   rV   Úmatch_subclassr  rW   r   rU  rÞ   rP   rP   rP   rQ   r  '  s
   r  c                   @   sL   e Zd ZdZedddƒedddƒedddƒeddd	ƒed
dƒgZdd„ ZdS )rB  z
802.11 QoSrH  r   r�   Z
Ack_Policyr�   ZEOSPZTIDr’   ZTXOPc                 C   s&   t | jtƒr| jjjrtS t | |¡S rI   )rJ   Z
underlayerr  r5  r8  rC  r   rË   r  rP   rP   rQ   rË   >  s    
zDot11QoS.guess_payload_classN)rR   rS   rT   rV   r   r   rW   rË   rP   rP   rP   rQ   rB  6  s   



ürB  )r‡   rˆ   z
short-slotZres11Zres12z	DSSS-OFDMZres14Zres15ZESSZIBSSrm   zCFP-reqÚprivacyzshort-preambleZPBCCZagilityrÕ   Zunspeczauth-expiredzdeauth-ST-leavingZ
inactivityzAP-fullzclass2-from-nonauthzclass3-from-nonasszdisas-ST-leavingzST-not-auth)
r   r�   r�   r‘   r’   r“   r”   r•   r–   r—   ÚsuccessZfailurezcannot-support-all-capzinexist-assozasso-deniedzalgo-unsupportedzbad-seq-numzchallenge-failureÚtimeoutzrate-unsupported)r   r�   r˜   r™   rš   r›   rœ   r�   rC   rž   rŸ   c                   @   s   e Zd ZdZdd„ ZdS )Ú_Dot11EltUtilszC
    Contains utils for classes that have Dot11Elt as payloads
    c                 C   sZ  i }t ƒ }| j}t|tƒ�r|jdkr@d|vr@t|jƒ|d< �nÎ|jdkr\t|jƒ|d< �n²t|tƒr¦t|j	dd… ƒ|d< dd	d
ddœ}| 
|j	dd… ¡|d< �nht|tƒrädd„ |jD ƒ}d|v rØ|d  |¡ n||d< �n*t|tƒ�rÄd}tdd„ |jD ƒƒ�rLtdd„ |jD ƒƒ�rL|j�rL|j�rLtdd„ |jD ƒƒ�rLd}n@tdd„ |jD ƒƒ�rŒtdd„ |jD ƒƒ�rŒ|j�rŒ|j�sŒd}|j�r¸|jd  d¡}| |d|  ¡ n
| |¡ nJ|jdk�rt|tƒ�r|j�r|jd  d¡}| d| ¡ n
| d¡ |j}q|�sHt| d ƒ�rH| jj�r>| d!¡ n
| d"¡ |�rV||d#< |S )$zVReturn a dictionary containing a summary of the Dot11
        elements fields
        r   Ússidr‘   rD   Nr�   ZcountryZIndoorZOutdoorzNon-countryZIgnored)ó   Ió   Oó   Xó   ÿr  Zcountry_desc_typec                 S   s   g | ]}|d @ d ‘qS )é   ç       @rP   ©r¿   rü   rP   rP   rQ   rÁ   u  rµ   z0_Dot11EltUtils.network_stats.<locals>.<listcomp>ÚratesZWPA2c                 s   s   | ]}|j d kV  qdS ©r–   N©Úsuiterc  rP   rP   rQ   Ú	<genexpr>†  rµ   z/_Dot11EltUtils.network_stats.<locals>.<genexpr>c                 s   s   | ]}|j d vV  qdS ))r�   r”   Nrf  rc  rP   rP   rQ   rh  ‡  rµ   c                 s   s   | ]}|j d vV  qdS ))r�   r�   r“   N©Úcipherrc  rP   rP   rQ   rh  ‰  s   ÿZWPA3c                 s   s   | ]}|j d kV  qdS re  rf  rc  rP   rP   rQ   rh  �  rµ   c                 s   s   | ]}|j d kV  qdS )r�   Nrf  rc  rP   rP   rQ   rh  Ž  rµ   zWPA3-transitionz%suite%z/%séÝ   zWPA/%sZWPAÚcapZWEPZOPNÚcrypto)ÚsetrK   rJ   ÚDot11Eltr<  r   ÚinfoÚordÚDot11EltCountryÚcountry_stringÚgetÚDot11EltRatesrd  ÚextendÚDot11EltRSNÚanyÚ
akm_suitesÚallÚmfp_capableÚmfp_requiredÚpairwise_cipher_suitesr?  ÚaddÚDot11EltMicrosoftWPAÚhasattrrl  rX  )rN   Úsummaryrm  r  Zcountry_descriptor_typesrd  Zwpa_versionÚauthrP   rP   rQ   Únetwork_statsZ  s~    

üÿ
ÿþþÿýÿþþ


z_Dot11EltUtils.network_statsN)rR   rS   rT   rU   rƒ  rP   rP   rP   rQ   r[  V  s   r[  ZSSIDzSupported RatesZFHsetzDSSS SetzCF SetZTIMzIBSS SetZCountryÚRequestzBSS LoadzEDCA SetZTSPECZTCLASZSchedulezChallenge textzPower ConstraintzPower CapabilityzSupported ChannelsZERPzHT CapabilitieszQoS CapabilityZRSNzExtended Supported RateszNeighbor ReportzHT OperationZInterworkingzExtendend CapabilitieszVHT CapabilitieszVendor Specific)r   r�   r�   r‘   r’   r“   r”   r•   r˜   r™   rš   r›   rœ   r�   rC   rÇ   é!   é$   é*   é-   é.   é0   é2   é4   é=   ék   ra  é¿   rk  r�   r‘   r’   r”   rC   r…  r†  r‡  rˆ  rŠ  r‹  ra  r�  rk  )ZRatesZDSsetZCFsetZIBSSsetÚ	challengeZPowerCapabilityZChannelsZERPinfoZHTinfoZRSNinfoZESRatesZExtendendCapatibilitiesZVHTCapabilitiesZVendorc                 C   s   i | ]\}}||“qS rP   rP   )r¿   ÚkÚvrP   rP   rQ   Ú
<dictcomp>â  rµ   r“  c                 C   s   t  | | ¡S rI   )Ú_dot11_info_elts_idsrt  rû   rP   rP   rQ   r´   å  rµ   r´   c                 C   s   t  | | ¡S rI   )Ú_dot11_info_elts_ids_revrt  rû   rP   rP   rQ   r´   æ  rµ   c                       s’   e Zd ZdZdgZdZeddeƒeddddƒe	dd	d
d„ dd�gZ
dZ‡ fdd„Zdd„ Zi Zeddd„ƒZeddd„ƒZdd„ Zdd„ Z‡  ZS )ro  z"
    A Generic 802.11 Element
    rp  z802.11 Information Elementr<  r   r?   Nrê   rB   c                 C   s   | j S rI   ©r?   rû   rP   rP   rQ   r´   ô  rµ   zDot11Elt.<lambda>éÿ   )rÙ   Ú
max_lengthc                    sB   |dkr,z|   ||¡ W n ty*   Y n0 tt| ƒ ||¡ d S )Nrp  )ZsetfieldvalÚAttributeErrorr$  ro  Ú__setattr__)rN   Úattrr*  r&  rP   rQ   rš  ø  s    zDot11Elt.__setattr__c                 C   s*   | j dkr"t| jƒ}d| tgfS dS d S )Nr   z	SSID='%s'rB   )r<  r   rp  r  )rN   r\  rP   rP   rQ   rA    s    

zDot11Elt.mysummaryc                 C   s$   |p
| j j}|| jvr | | j|< d S rI   )r<  r%  Úregistered_ies)ÚclsÚidrP   rP   rQ   Úregister_variant
  s    
zDot11Elt.register_variantc                 O   sJ   |rFt |d d… ƒ}| j || ¡}|j| jkrB|j|d|i|¤ŽS |} | S )Nr�   rÅ   )rq  rœ  rt  Údispatch_hook)r�  rÅ   r±   ÚkargsZ_idZidclsrP   rP   rQ   r     s    zDot11Elt.dispatch_hookc                 C   s>   t |ƒdkr:t|d ƒ}|dkr:|dkr:|dd| … | _|S )Nr‘   r�   r   r—  r�   )r?   r   rp  r
  rP   rP   rQ   Úpre_dissect  s
    zDot11Elt.pre_dissectc                 C   s:   | j d u r2|d d… tt |ƒd ƒ |dd …  }|| S ©Nr�   r�   )r?   r   r  rP   rP   rQ   rÞ   %  s    
(zDot11Elt.post_build)N)N)rR   rS   rT   rU   r,  rV   r   Ú_dot11_id_enumr   r,   rW   Zshow_indentrš  rA  rœ  ÚclassmethodrŸ  r   r¢  rÞ   r-  rP   rP   r&  rQ   ro  ì  s&   
ÿþ	

ro  c                   @   s2   e Zd ZdZdZeddeƒeddƒeddƒgZd	S )
ÚDot11EltDSSSetz802.11 DSSS Parameter SetTr<  r‘   r?   r�   rD   r   N)	rR   rS   rT   rV   rW  r   r¤  r   rW   rP   rP   rP   rQ   r¦  -  s   
ýr¦  c                	   @   sR   e Zd ZdZdZeddeƒeddƒedddƒed	ddƒed
ddƒedddƒgZ	dS )ÚDot11EltERPz
802.11 ERPTr<  r‡  r?   r�   ZNonERP_Presentr   ZUse_ProtectionZBarker_Preamble_ModeÚresr“   N)
rR   rS   rT   rV   rW  r   r¤  r   r   rW   rP   rP   rP   rQ   r§  9  s   




úr§  c                   @   sL   e Zd ZdZeddƒedddddd	d
ddddddddddœƒgZdd„ ZdS )ÚRSNCipherSuitezCipher suiterÏ   é¬  rj  r’   zUse group cipher suitezWEP-40ZTKIPZOCBzCCMP-128zWEP-104zBIP-CMAC-128z#Group addressed traffic not allowedzGCMP-128zGCMP-256zCCMP-256zBIP-GMAC-128zBIP-GMAC-256zBIP-CMAC-256)r   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   c                 C   s   d|fS rß   rP   rà   rP   rP   rQ   rá   ^  s    zRSNCipherSuite.extract_paddingN©rR   rS   rT   rV   r$   r   rW   rá   rP   rP   rP   rQ   r©  H  s(   òþr©  c                   @   sV   e Zd ZdZeddƒedddddd	d
dddddddddddddddœƒgZdd„ ZdS )ÚAKMSuitez	AKM suiterÏ   rª  rg  r�   ÚReservedz802.1XZPSKz	FT-802.1XzFT-PSKz
WPA-SHA256z
PSK-SHA256ZTDLSZSAEzFT-SAEzAP-PEER-KEYzWPA-SHA256-SUITE-BzWPA-SHA384-SUITE-BzFT-802.1X-SHA384zFILS-SHA256zFILS-SHA384zFT-FILS-SHA256zFT-FILS-SHA384ZOWE)r   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   rC   rž   rŸ   c                 C   s   d|fS rß   rP   rà   rP   rP   rQ   rá     s    zAKMSuite.extract_paddingNr«  rP   rP   rP   rQ   r¬  d  s2   íþr¬  c                	   @   sD   e Zd ZdZedddd�eddedddd�d	d
„ d�gZdd„ ZdS )ÚPMKIDListPacketZPMKIDsÚ	nb_pmkidsNZ
pmkid_list©Zcount_ofrB   rC   r×   c                 C   s   | j S rI   )r¯  rÓ   rP   rP   rQ   r´   �  rµ   zPMKIDListPacket.<lambda>©Z
count_fromc                 C   s   d|fS rß   rP   rà   rP   rP   rQ   rá   ‘  s    zPMKIDListPacket.extract_padding)	rR   rS   rT   rV   r   r   r.   rW   rá   rP   rP   rP   rQ   r®  …  s   üþ
r®  c                   @   s>  e Zd ZdZdZeddeƒeddƒeddƒe	d	e
ƒ e
ƒed
ddd�ede
ƒ ge
dd„ d�edddd�edeƒ gedd„ d�edddƒedddƒedddƒedddƒedddƒedddƒedddƒedddƒedddƒedddƒedddƒed ddƒed!ddƒed"ddƒee	d#eƒ eƒd$d„ ƒee	d%e
d&d'�e
ƒd(d„ ƒgZdS ))rw  z802.11 RSN informationTr<  rŠ  r?   Nrè   r�   Zgroup_cipher_suiteÚnb_pairwise_cipher_suitesr}  r°  c                 C   s   | j S rI   )r²  ©r  rP   rP   rQ   r´   ¨  rµ   zDot11EltRSN.<lambda>r±  Únb_akm_suitesry  c                 C   s   | j S rI   )r´  r³  rP   rP   rQ   r´   ³  rµ   r{  r|  Zgtksa_replay_counterr   r�   Zptksa_replay_counterZno_pairwiseZpre_authrÕ   ZocvcZextended_key_idZpbacZspp_a_msdu_requiredZspp_a_msdu_capableZpeer_key_enabledZjoint_multiband_rsnaÚpmkidsc                 C   s8   | j d u rdS | j d| jpdd  | jp*dd   dkS )NTrš   r   r’   r�   )r?   r²  r´  rÓ   rP   rP   rQ   r´   Ê  s    ÿþÿüZgroup_management_cipher_suiter”   ri  c                 C   s\   | j d u rdS | j d| jpdd  | jp*dd  | jr:dnd | jrL| jjpNdd   dkS )NTrš   r   r’   r�   rC   )r?   r²  r´  rµ  r¯  rÓ   rP   rP   rQ   r´   Ö  s    ÿþýüÿú)rR   rS   rT   rV   rW  r   r¤  r   r!   r%   r©  r   r&   r¬  r   r   r®  rW   rP   rP   rP   rQ   rw  —  sj   
ýüýü













þ
ÿýÇrw  c                   @   s4   e Zd ZdZeddƒeddƒeddƒgZdd	„ Zd
S )Ú Dot11EltCountryConstraintTripletz!802.11 Country Constraint TripletZfirst_channel_numberr�   Znum_channelsr¥   Zmtpr   c                 C   s   d|fS ©Nrµ   rP   rà   rP   rP   rQ   rá   ì  s    z0Dot11EltCountryConstraintTriplet.extract_paddingN)rR   rS   rT   rV   r   rW   rá   rP   rP   rP   rQ   r¶  ä  s   ýr¶  c                	   @   sZ   e Zd ZdZdZeddeƒeddƒeddd	d
�e	dg e
dd„ d�eeddƒdd„ ƒgZdS )rr  z802.11 CountryTr<  r•   r?   Nrs  ó      r‘   r×   Údescriptorsc                 C   s   | j d | j d  S ©Nr‘   r–  rÓ   rP   rP   rQ   r´   û  s    zDot11EltCountry.<lambda>rØ   rp   r   c                 C   s   t | jƒd d S r£  )r?   r¹  rÓ   rP   rP   rQ   r´     rµ   )rR   rS   rT   rV   rW  r   r¤  r   r+   r&   r¶  r   rW   rP   rP   rP   rQ   rr  ð  s    
üþôrr  c                   @   s   e Zd Zdd„ ZdS )Ú
_RateFieldc                 C   s4   |d u rdS t |d@ d ƒ}|d@ r,|d7 }|d S )NrB   ra  rb  é€   z(B)z Mbps)Ústr)rN   r·   r*  rº   rP   rP   rQ   r(    s    z_RateField.i2reprN)rR   rS   rT   r(  rP   rP   rP   rQ   r»    s   r»  c                   @   sD   e Zd ZdZdZeddeƒeddƒeddge	d	d
ƒdd„ d�gZ
dS )ru  z802.11 RatesTr<  r�   r?   Nrd  é‚   rB   r   c                 C   s   | j S rI   r–  r³  rP   rP   rQ   r´     rµ   zDot11EltRates.<lambda>rØ   )rR   rS   rT   rV   rW  r   r¤  r   r   r»  rW   rP   rP   rP   rQ   ru    s   
üýru  c                =   @   sŽ  e Zd ZdZdZeddeƒeddƒeddd	d
d�eddd	ƒeddd	ƒeddd	ƒe	ddd	dddœƒeddd	ƒedddƒeddd	ƒeddd	ƒeddd	ƒeddd	ƒe	dddddddœƒe	ddd	d d!dœƒed"dd	d
d#�ed$dd%d&d�ed'd(d%ƒed)d%dd&d#�ed*dd+d,d�ed-dd	ƒed.ddƒed/dd	ƒed0dd	ƒed1dd2ƒed3dd4ƒed5dd%ƒed6dd7d,d#�ed8dd9d
d�ed:dd	ƒed;dd	ƒed<ddƒed=dd>ƒed?ddƒed@dd	d
d#�edAdd%dBd�edCddƒedDddƒedEddƒedFddƒedGddƒedHddƒedIddƒedJddƒedKddƒedLdd	ƒedMdd	ƒedNdd	ƒedOddƒedPdd	ƒedQdd	ƒedRdd	ƒedSdd	ƒedTdd	ƒedUdd	dBd#�e
dVdd(g dW¢ƒg8ZdS )XÚDot11EltHTCapabilitiesz802.11 HT CapabilitiesTr<  rˆ  r?   NZL_SIG_TXOP_Protectionr   r�   r   r  ZForty_Mhz_IntolerantZPSMPZDSSS_CCKZ
Max_A_MSDUz3839 oz7935 orò   ZDelayed_BlockAckZRx_STBCr�   ZTx_STBCZShort_GI_40MhzZShort_GI_20MhzZGreen_FieldZSM_Power_Savez	static SMz
dynamic SMÚdisabled)r   r�   r‘   ZSupported_Channel_WidthZ20Mhzz20Mhz+40MhzZLDPC_Coding_Capabilityr  rq   r‘   r  ZMin_MPDCU_Start_Spacingr–   ZMax_A_MPDU_Length_Exponentrr   é   rî   ZTX_Unequal_ModulationZTX_Max_Spatial_StreamsZTX_RX_MCS_Set_Not_EqualZTX_MCS_Set_Definedrs   r”   ZRX_Highest_Supported_Data_Rater˜   rt   ZRX_MSC_BitmaskéM   r„   r’   ZRD_ResponderZHTC_HT_SupportZMCS_Feedbackr…   r“   ZPCO_Transition_TimeZPCOr†   rV  ZChannel_Estimation_CapabilityZ#CSI_max_n_Rows_Beamformer_SupportedZ3Compressed_Steering_n_Beamformer_Antennas_SupportedZ6Noncompressed_Steering_n_Beamformer_Antennas_SupportedZ#CSI_n_Beamformer_Antennas_SupportedZMinimal_GroupingZ(Explicit_Compressed_Beamforming_FeedbackZ+Explicit_Noncompressed_Beamforming_FeedbackZ*Explicit_Transmit_Beamforming_CSI_FeedbackZExplicit_Compressed_SteeringZExplicit_Noncompressed_SteeringZ!Explicit_CSI_Transmit_BeamformingZCalibrationZImplicit_Trasmit_BeamformingZTransmit_NDPZReceive_NDPZTransmit_Staggered_SoundingZReceive_Staggered_SoundingZ'Implicit_Transmit_Beamforming_ReceivingZASEL)r¨  ZTransmit_Sounding_PPDUsZReceive_ASELZAntenna_Indices_FeedbackZExplicit_CSI_FeedbackZ)Explicit_CSI_Feedback_Based_Transmit_ASELZAntenna_Selection)rR   rS   rT   rV   rW  r   r¤  r   r   r   r   rW   rP   rP   rP   rQ   r¿  "  s†   










ÿÿ















ÿ













ÿ¾r¿  c                   @   sP   e Zd ZdZdZeddeƒeddƒeddƒe	d	d
dd„ d�gZ
eddd„ƒZdS )ÚDot11EltVendorSpecificz802.11 Vendor SpecificTr<  rk  r?   NrÏ   r   rp  rB   c                 C   s
   | j d S rº  r–  rû   rP   rP   rQ   r´   z  rµ   zDot11EltVendorSpecific.<lambda>rØ   c                 O   sZ   |rVt  dd|dd…  ¡d }|dkrVt|d ƒ}|dkr@tS |dkrJn|dkrRtS | S )	NrS  rÛ   r�   r“   r   éòP  r�   r’   )rÜ   Úunpackr   r  rÃ  )r�  rÅ   r±   r¡  rÏ   Útype_rP   rP   rQ   r   }  s    z$Dot11EltVendorSpecific.dispatch_hook)N)rR   rS   rT   rV   rW  r   r¤  r   r$   r,   rW   r¥  r   rP   rP   rP   rQ   rÃ  s  s   
ürÃ  c                   @   sD   e Zd ZdZdZdZdZejdd… e	ddƒg e
jd	d
…  ZdS )r  z802.11 Microsoft WPATrk  rÄ  Nr‘   rÍ   r�   r�   r–   )rR   rS   rT   rV   rW  r<  rÏ   rÃ  rW   r-   rw  rP   rP   rP   rQ   r  ’  s   ÿþr  c                   @   s0   e Zd ZdZeddƒeddƒedddeƒgZdS )	ÚDot11Beaconz802.11 Beaconrf   r   Úbeacon_intervaléd   rl  rC   N©	rR   rS   rT   rV   r   r!   r   Úcapability_listrW   rP   rP   rP   rQ   rÇ  ¤  s
   þrÇ  c                   @   s   e Zd ZdZdS )Ú	Dot11ATIMz802.11 ATIMN©rR   rS   rT   rV   rP   rP   rP   rQ   rÌ  «  s   rÌ  c                   @   s   e Zd ZdZeddeƒgZdS )Ú
Dot11Disasz802.11 DisassociationÚreasonr�   N©rR   rS   rT   rV   r    Úreason_coderW   rP   rP   rP   rQ   rÎ  ¯  s   rÎ  c                   @   s(   e Zd ZdZedddeƒeddƒgZdS )ÚDot11AssoReqz802.11 Association Requestrl  r   rC   Úlisten_intervaléÈ   N©rR   rS   rT   rV   r   rË  r!   rW   rP   rP   rP   rQ   rÒ  ´  s   ÿrÒ  c                   @   s0   e Zd ZdZedddeƒeddƒeddƒgZdS )ÚDot11AssoRespz802.11 Association Responserl  r   rC   ÚstatusZAIDNrÕ  rP   rP   rP   rQ   rÖ  º  s
   þrÖ  c                   @   s0   e Zd ZdZedddeƒeddƒedeƒgZ	dS )	ÚDot11ReassoReqz802.11 Reassociation Requestrl  r   rC   rÓ  rÔ  Z
current_APN)
rR   rS   rT   rV   r   rË  r!   r3   r   rW   rP   rP   rP   rQ   rØ  Á  s
   þrØ  c                   @   s   e Zd ZdZdS )ÚDot11ReassoRespz802.11 Reassociation ResponseNrÍ  rP   rP   rP   rQ   rÙ  È  s   rÙ  c                   @   s   e Zd ZdZdS )ÚDot11ProbeReqz802.11 Probe RequestNrÍ  rP   rP   rP   rQ   rÚ  Ì  s   rÚ  c                   @   s0   e Zd ZdZeddƒeddƒedddeƒgZdS )	ÚDot11ProbeRespz802.11 Probe Responserf   r   rÈ  rÉ  rl  rC   NrÊ  rP   rP   rP   rQ   rÛ  Ð  s
   þrÛ  c                   @   s<   e Zd ZdZeddddgƒeddƒeddeƒgZdd	„ Zd
S )Ú	Dot11Authz802.11 AuthenticationÚalgor   ÚopenZ	sharedkeyÚseqnumr×  c                 C   s   | j |j d krdS dS )Nr�   r   )rß  rM   rP   rP   rQ   rL   Ý  s    zDot11Auth.answersN)	rR   rS   rT   rV   r    r!   Ústatus_coderW   rL   rP   rP   rP   rQ   rÜ  ×  s   
þrÜ  c                   @   s   e Zd ZdZeddeƒgZdS )ÚDot11Deauthz802.11 DeauthenticationrÏ  r�   NrÐ  rP   rP   rP   rQ   rá  ã  s   rá  c                   @   s   e Zd ZdZdS )ÚDot11Ackz802.11 Ack packetNrÍ  rP   rP   rP   rQ   râ  è  s   râ  c                   @   s*   e Zd ZdZeddƒgZeddd„ƒZdS )rC  z$802.11 Encrypted (unknown algorithm)rÖ   Nc                 O   s|   d}d}|rvt |ƒdkrvt|d ƒ|@ rrt |ƒ|krrt|d ƒt|d ƒdB d@ krXtS t|d ƒdkrltS tS ntS tjS )NrÇ   r–   r‘   r�   r   ra  r�   )r?   r   Ú	Dot11TKIPÚ	Dot11CCMPrC  ÚDot11WEPr   Ú	raw_layer)r�  rÅ   r±   r¡  Z	KEY_EXTIVZ	EXTIV_LENrP   rP   rQ   r   ö  s     zDot11Encrypted.dispatch_hook)N)rR   rS   rT   rV   r*   rW   r¥  r   rP   rP   rP   rQ   rC  ò  s   rC  c                   @   sj   e Zd ZdZedddƒeddƒeddd	d
�eddƒgZddd„Z	dd„ Z
dd„ Zeddd„ƒZdd„ ZdS )rå  z802.11 WEP packetÚivr¸  r‘   Zkeyidr   ÚwepdataNr’   )ZremainÚicvc                 C   s^   |d u rt j}|rZt jrZtt | j| d¡ ¡d tƒ ƒ 	¡ }|  
t| | j¡| ¡  ƒ¡ d S )NÚutf8)r   rJ  Úcrypto_validr;   r<   ÚARC4rç  Úencoder:   Z	decryptorZadd_payloadr2   Úupdaterè  Úfinalize)rN   rL  ÚdrP   rP   rQ   rK    s    
ýzDot11WEP.decryptc                 C   s   |   ¡  d S rI   )rK  rà   rP   rP   rQ   r    s    zDot11WEP.post_dissectc                 C   s   | j d u rt | ¡S dS r·  )rè  r   Úbuild_payloadr@  rP   rP   rQ   rñ  !  s    

zDot11WEP.build_payloadc                 C   sœ   |d u rt j}|rŒ| jd u r:|t dt|ƒd@ ¡7 }d}n|dd… }tt | j	| 
d¡ ¡d tƒ ƒ ¡ }|d d… | |¡ | ¡  | S tdƒ dS d S )NrR  rT  rµ   r’   r–   rê  z9No WEP key set (conf.wepkey).. strange results expected..)r   rJ  ré  rÜ   rÝ   r   r;   r<   rì  rç  rí  r:   Z	encryptorrî  rï  r6   )rN   r  rÊ   rL  ré  ÚerP   rP   rQ   Úencrypt&  s    
ý"zDot11WEP.encryptc                 C   s   | j d u r|  |t|ƒ¡}|S rI   )rè  ró  r
   r  rP   rP   rQ   rÞ   :  s    
zDot11WEP.post_build)N)N)rR   rS   rT   rV   r+   r   r*   r   rW   rK  r  rñ  r   ró  rÞ   rP   rP   rP   rQ   rå    s   
ý
rå  c                   @   sš   e Zd ZdZeddƒeddƒeddƒedddƒeddd	ƒed
ddƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒeddƒgZdS )rã  z802.11 TKIP packetZTSC1r   ZWEPSeedZTSC0Úkey_idr�   Úext_ivr�   r¨  r“   ZTSC2c                 C   s   | j S rI   ©rõ  rÓ   rP   rP   rQ   r´   O  rµ   zDot11TKIP.<lambda>ZTSC3c                 C   s   | j S rI   rö  rÓ   rP   rP   rQ   r´   P  rµ   ZTSC4c                 C   s   | j S rI   rö  rÓ   rP   rP   rQ   r´   Q  rµ   ZTSC5c                 C   s   | j S rI   rö  rÓ   rP   rP   rQ   r´   R  rµ   rÖ   N)	rR   rS   rT   rV   r   r   r   r*   rW   rP   rP   rP   rQ   rã  D  s   


òrã  c                   @   sr   e Zd ZdZeddƒeddƒeddƒedddƒeddd	ƒed
ddƒeddƒeddƒeddƒeddƒeddƒgZdS )rä  z802.11 CCMP packetZPN0r   ZPN1Zres0rô  r�   rõ  r�   rq   r“   ZPN2ZPN3ZPN4ZPN5rÖ   N)rR   rS   rT   rV   r   r   r*   rW   rP   rP   rP   rQ   rä  Z  s   


órä  r�   ré   rš   r4  rÒ   )rÔ   rÍ   r“   r–   r—   r˜   r™   r›   i!  i"  i#  c                   @   sX   e Zd ZdZdZdZejejdddfdd„Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ ZdS )ÚWiFi_ama±  Before using this, initialize "iffrom" and "ifto" interfaces:
iwconfig iffrom mode monitor
iwpriv orig_ifto hostapd 1
ifconfig ifto up
note: if ifto=wlan0ap then orig_ifto=wlan0
note: ifto and iffrom must be set on the same channel
ex:
ifconfig eth1 up
iwconfig eth1 mode monitor
iwconfig eth1 channel 11
iwpriv wlan0 hostapd 1
ifconfig wlan0ap up
iwconfig wlan0 channel 11
iwconfig wlan0 essid dontexist
iwconfig wlan0 mode managed
ZairpwnNrB   c                 C   s6   || _ || _t | ¡ ¡| _t | ¡ ¡| _|| _d S rI   )ÚiffromÚiftoÚreÚcompilerí  ÚptrnÚiptrnÚreplace)rN   rø  rù  rþ  ÚpatternZignorepatternrP   rP   rQ   Úparse_options±  s
    zWiFi_am.parse_optionsc                 C   sf   t |tƒsdS |jd@ sdS | t¡s*dS | t¡}t|jƒ}| j 	|¡sNdS | j
 	|¡du rbdS dS )Nr   r�   T)rJ   r  r5  Zhaslayerr5   Úgetlayerr
   rK   rü  Úmatchrý  )rN   r·   ÚtcprÊ   rP   rP   rQ   Ú
is_request¹  s    




zWiFi_am.is_requestc                 C   sÆ   |  t¡}|  t¡}t|jƒ}|jj`d|_|j|j |_|_|t|j|j	d� }|t|j
|j|j|jt|ƒ dd� }| ¡ }|| j }| jd7  _d|  t¡_|  t¡ jt| jƒ7  _||gS )Nr:  )ÚsrcÚdstZPA)ÚsportÚdportÚseqÚackÚflagsr�   r   )r  r4   r5   r
   rK   r5  r>  r=  r  r  r  r  r
  r	  r?   Úcopyrþ  r<  r  )rN   r  Úipr  rÊ   ÚqrP   rP   rQ   Ú
make_replyÈ  s"    


þ
zWiFi_am.make_replyc                 G   s   |d d }t | d¡ƒ d S )Nr   z/Sent %IP.src%:%IP.sport% > %IP.dst%:%TCP.dport%)Úprintr?  )rN   ÚqueryÚreplyr  rP   rP   rQ   Úprint_replyÚ  s    zWiFi_am.print_replyc                 C   s   t |fd| ji| j¤Ž d S ©NÚiface)r9   rù  Zoptsend)rN   r  rP   rP   rQ   Ú
send_replyÞ  s    zWiFi_am.send_replyc                 C   s   t f d| ji| j¤Ž d S r  )r8   rø  Zoptsniffr@  rP   rP   rQ   r8   á  s    zWiFi_am.sniff)rR   rS   rT   rU   Zfunction_nameÚfilterr   r  r   r  r  r  r  r8   rP   rP   rP   rQ   r÷  �  s   
ÿ
r÷  c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚDot11PacketListNÚ	Dot11Listc                 C   s"   |d u rt j}t | |||¡ d S rI   )r   Ústats_dot11_protocolsr0   rÄ   )rN   r¨  rV   ÚstatsrP   rP   rQ   rÄ   é  s    zDot11PacketList.__init__c                 C   sV   dd„ | j D ƒ}g }|D ]*}| ¡ }| ¡  | tƒ |jjj ¡ qt|d| j d�S )Nc                 S   s&   g | ]}t |v r|jd kr|t  ‘qS )r�   )r  rÍ   rc  rP   rP   rQ   rÁ   ð  rµ   z.Dot11PacketList.toEthernet.<locals>.<listcomp>zEther from %s)rV   )r¨  r  rN  Úappendr1   rK   r0   Zlistname)rN   rÖ   Úr2r  r  rP   rP   rQ   Ú
toEthernetï  s    zDot11PacketList.toEthernet)Nr  N)rR   rS   rT   rÄ   r  rP   rP   rP   rQ   r  è  s   
r  )šrU   Ú
__future__r   rú  rÜ   Úzlibr   Zscapy.configr   r   Z
scapy.datar   r   r   r	   Zscapy.compatr
   r   r   r   Zscapy.packetr   r   r   r   Zscapy.fieldsr   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scapy.ansmachiner/   Zscapy.plistr0   Zscapy.layers.l2r1   r2   r3   Zscapy.layers.inetr4   r5   Zscapy.errorr6   r7   Zscapy.sendrecvr8   r9   rë  Zcryptography.hazmat.backendsr:   Z&cryptography.hazmat.primitives.ciphersr;   r<   ZCiphersrp  r=   râ   r  r  r  r  r  r  r  r  r  r  r  r  r  r»   r°   rÌ   rã   rO  rP  rG  r#  r  r  rB  rË  rÑ  rà  r[  r”  Z_dot11_elt_deprecated_namesÚitemsr•  rî  r¤  ro  r¦  r§  r©  r¬  r®  rw  r¶  rr  r»  ru  rŸ  r¿  rÃ  r  rÇ  rÌ  rÎ  rÒ  rÖ  rØ  rÙ  rÚ  rÛ  rÜ  rá  râ  rC  rå  rã  rä  ræ  Zl2typesÚregisterZregister_num2layerr÷  r  r  rP   rP   rP   rQ   Ú<module>   sô  |
	B

û&  òòñþÎ9÷üóxüý[ã"ò
þA!M

Q
8










H