o
    jn                    @   s  d dl Z d dlmZ d dlmZmZ d dlm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 d!d"d#d$d%d&i d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHi dIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzZG d{d| d|Z	G d}d~ d~Z
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ G dd dZ!G dd deZ"G dd de"Z#G dd de"Z$G dd de#Z%G dd dZ&G dd deZ'G dd dZ(G dd dZ)G dd de"Z*G dd de'Z+G dd de"Z,G ddĄ de"Z-G ddƄ de"Z.G ddȄ de-Z/dS )    N)crc32)ProtocolPacketarray_tobytes)RC4il	     iq	     iv	     i{	     i	     i	     i	     i	     i	  	   i	  
   i	     i	     i	     i	     i2  "   i<  $   iF  &   iP  (   iZ  *   id  ,   in  .   ix  0   i  4   i  8   i  <   i  @   i|  d   i  f   i  h   i  j   i  l   i  n   i  p   i  r   i  t   i  v   i  x   i  z   i  |   i  ~   i     i     i     i&     i0     i:     iD     iq     i     i     i                                                  )i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   c                   @   s   e Zd ZeddZeddZeddZeddZeddZeddZ	eddZ
ed	dZed
dZeddZeddZeddZeddZeddZeddZeddZdS )Dot11ManagementCapabilities1000000000000000r   010000000000000000100000000000000001000000000000000010000000000000000100000000000000001000000000000000010000000000000000100000000000000001000000000000000010000000000000000100000000000000001000000000000000010000000000000000100000000000000001N)__name__
__module____qualname__intCAPABILITY_RESERVED_1CAPABILITY_RESERVED_2CAPABILITY_DSSS_OFDMCAPABILITY_RESERVED_3CAPABILITY_RESERVED_4CAPABILITY_SHORT_SLOT_TIMECAPABILITY_RESERVED_5CAPABILITY_RESERVED_6CAPABILITY_CH_AGILITYCAPABILITY_PBCCCAPABILITY_SHORT_PREAMBLECAPABILITY_PRIVACYCAPABILITY_CF_POLL_REQCAPABILITY_CF_POLLABLECAPABILITY_IBSSCAPABILITY_ESS rm   rm   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dot11.pyrH   #   s"    
"













rH   c                   @   s  e Zd ZeddZeddZeddZeddZeddZeddZ	eddZ
ed	dZed
dZeddZeddZeddZeddZeddZeddZeddZeddZeed> B Zeed> B Zeed> B Zeed> B Zee	d> B Zee
d> B Zeed> B Zeed> B Zeed> B Zeed> B Zeed> B Zeed> B Z eed> B Z!eed> B Z"eed> B Z#eed> B Z$eddZ%eddZ&eddZ'eddZ(eddZ)eddZ*eddZ+ed	dZ,ed
dZ-eddZ.eddZ/eddZ0eddZ1eddZ2eddZ3eddZ4eddZ5e%e&d> B Z6e%e'd> B Z7e%e(d> B Z8e%e)d> B Z9e%e*d> B Z:e%e+d> B Z;e%e,d> B Z<e%e.d> B Z=e%e/d> B Z>e%e0d> B Z?e%e1d> B Z@e%e2d> B ZAe%e3d> B ZBe%e4d> B ZCe%e5d> B ZDeddZEeddZFeddZGeddZHeddZIeddZJeddZKed	dZLed
dZMeddZNeddZOeddZPeddZQeddZReddZSeddZTeddZUeEeFd> B ZVeEeGd> B ZWeEeHd> B ZXeEeId> B ZYeEeJd> B ZZeEeLd> B Z[eEeMd> B Z\eEeNd> B Z]eEeOd> B Z^eEePd> B Z_eEeQd> B Z`eEeRd> B ZaeEeSd> B ZbeEeTd> B ZceEeUd> B ZdeddZeeddZfeddZgeddZheddZieddZjeddZked	dZled
dZmeddZneddZoeddZpeddZqeddZreddZseddZteddZueeefd> B Zveeegd> B Zweeehd> B Zxeeeid> B Zyeeejd> B Zzeeekd> B Z{eeeld> B Z|eeemd> B Z}eeend> B Z~eeeod> B Zeeepd> B Zeeeqd> B Zeeerd> B Zeeesd> B Zeeetd> B Zeeeud> B ZdS )
Dot11Types00r   0000000100100011010001010110011110001001101010111100110111101111011011N)rY   rZ   r[   r\   DOT11_TYPE_MANAGEMENT,DOT11_SUBTYPE_MANAGEMENT_ASSOCIATION_REQUEST-DOT11_SUBTYPE_MANAGEMENT_ASSOCIATION_RESPONSE.DOT11_SUBTYPE_MANAGEMENT_REASSOCIATION_REQUEST/DOT11_SUBTYPE_MANAGEMENT_REASSOCIATION_RESPONSE&DOT11_SUBTYPE_MANAGEMENT_PROBE_REQUEST'DOT11_SUBTYPE_MANAGEMENT_PROBE_RESPONSE"DOT11_SUBTYPE_MANAGEMENT_RESERVED1"DOT11_SUBTYPE_MANAGEMENT_RESERVED2DOT11_SUBTYPE_MANAGEMENT_BEACONDOT11_SUBTYPE_MANAGEMENT_ATIM'DOT11_SUBTYPE_MANAGEMENT_DISASSOCIATION'DOT11_SUBTYPE_MANAGEMENT_AUTHENTICATION)DOT11_SUBTYPE_MANAGEMENT_DEAUTHENTICATIONDOT11_SUBTYPE_MANAGEMENT_ACTION"DOT11_SUBTYPE_MANAGEMENT_RESERVED3"DOT11_SUBTYPE_MANAGEMENT_RESERVED41DOT11_TYPE_MANAGEMENT_SUBTYPE_ASSOCIATION_REQUEST2DOT11_TYPE_MANAGEMENT_SUBTYPE_ASSOCIATION_RESPONSE3DOT11_TYPE_MANAGEMENT_SUBTYPE_REASSOCIATION_REQUEST4DOT11_TYPE_MANAGEMENT_SUBTYPE_REASSOCIATION_RESPONSE+DOT11_TYPE_MANAGEMENT_SUBTYPE_PROBE_REQUEST,DOT11_TYPE_MANAGEMENT_SUBTYPE_PROBE_RESPONSE'DOT11_TYPE_MANAGEMENT_SUBTYPE_RESERVED1'DOT11_TYPE_MANAGEMENT_SUBTYPE_RESERVED2$DOT11_TYPE_MANAGEMENT_SUBTYPE_BEACON"DOT11_TYPE_MANAGEMENT_SUBTYPE_ATIM,DOT11_TYPE_MANAGEMENT_SUBTYPE_DISASSOCIATION,DOT11_TYPE_MANAGEMENT_SUBTYPE_AUTHENTICATION.DOT11_TYPE_MANAGEMENT_SUBTYPE_DEAUTHENTICATION$DOT11_TYPE_MANAGEMENT_SUBTYPE_ACTION'DOT11_TYPE_MANAGEMENT_SUBTYPE_RESERVED3'DOT11_TYPE_MANAGEMENT_SUBTYPE_RESERVED4DOT11_TYPE_CONTROLDOT11_SUBTYPE_CONTROL_RESERVED1DOT11_SUBTYPE_CONTROL_RESERVED2DOT11_SUBTYPE_CONTROL_RESERVED3DOT11_SUBTYPE_CONTROL_RESERVED4DOT11_SUBTYPE_CONTROL_RESERVED5DOT11_SUBTYPE_CONTROL_RESERVED6DOT11_SUBTYPE_CONTROL_RESERVED7DOT11_SUBTYPE_CONTROL_RESERVED8'DOT11_SUBTYPE_CONTROL_BLOCK_ACK_REQUESTDOT11_SUBTYPE_CONTROL_BLOCK_ACK$DOT11_SUBTYPE_CONTROL_POWERSAVE_POLL%DOT11_SUBTYPE_CONTROL_REQUEST_TO_SEND#DOT11_SUBTYPE_CONTROL_CLEAR_TO_SEND$DOT11_SUBTYPE_CONTROL_ACKNOWLEDGMENTDOT11_SUBTYPE_CONTROL_CF_END#DOT11_SUBTYPE_CONTROL_CF_END_CF_ACK$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED1$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED2$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED3$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED4$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED5$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED6$DOT11_TYPE_CONTROL_SUBTYPE_RESERVED7,DOT11_TYPE_CONTROL_SUBTYPE_BLOCK_ACK_REQUEST$DOT11_TYPE_CONTROL_SUBTYPE_BLOCK_ACK)DOT11_TYPE_CONTROL_SUBTYPE_POWERSAVE_POLL*DOT11_TYPE_CONTROL_SUBTYPE_REQUEST_TO_SEND(DOT11_TYPE_CONTROL_SUBTYPE_CLEAR_TO_SEND)DOT11_TYPE_CONTROL_SUBTYPE_ACKNOWLEDGMENT!DOT11_TYPE_CONTROL_SUBTYPE_CF_END(DOT11_TYPE_CONTROL_SUBTYPE_CF_END_CF_ACKDOT11_TYPE_DATADOT11_SUBTYPE_DATADOT11_SUBTYPE_DATA_CF_ACKDOT11_SUBTYPE_DATA_CF_POLL!DOT11_SUBTYPE_DATA_CF_ACK_CF_POLLDOT11_SUBTYPE_DATA_NULL_NO_DATA!DOT11_SUBTYPE_DATA_CF_ACK_NO_DATA"DOT11_SUBTYPE_DATA_CF_POLL_NO_DATA)DOT11_SUBTYPE_DATA_CF_ACK_CF_POLL_NO_DATADOT11_SUBTYPE_DATA_QOS_DATA"DOT11_SUBTYPE_DATA_QOS_DATA_CF_ACK#DOT11_SUBTYPE_DATA_QOS_DATA_CF_POLL*DOT11_SUBTYPE_DATA_QOS_DATA_CF_ACK_CF_POLL#DOT11_SUBTYPE_DATA_QOS_NULL_NO_DATADOT11_SUBTYPE_DATA_RESERVED1&DOT11_SUBTYPE_DATA_QOS_CF_POLL_NO_DATA-DOT11_SUBTYPE_DATA_QOS_CF_ACK_CF_POLL_NO_DATADOT11_TYPE_DATA_SUBTYPE_DATADOT11_TYPE_DATA_SUBTYPE_CF_ACKDOT11_TYPE_DATA_SUBTYPE_CF_POLL&DOT11_TYPE_DATA_SUBTYPE_CF_ACK_CF_POLL$DOT11_TYPE_DATA_SUBTYPE_NULL_NO_DATA&DOT11_TYPE_DATA_SUBTYPE_CF_ACK_NO_DATA.DOT11_TYPE_DATA_SUBTYPE_CF_ACK_CF_POLL_NO_DATA DOT11_TYPE_DATA_SUBTYPE_QOS_DATA'DOT11_TYPE_DATA_SUBTYPE_QOS_DATA_CF_ACK(DOT11_TYPE_DATA_SUBTYPE_QOS_DATA_CF_POLL/DOT11_TYPE_DATA_SUBTYPE_QOS_DATA_CF_ACK_CF_POLL(DOT11_TYPE_DATA_SUBTYPE_QOS_NULL_NO_DATA!DOT11_TYPE_DATA_SUBTYPE_RESERVED1+DOT11_TYPE_DATA_SUBTYPE_QOS_CF_POLL_NO_DATA2DOT11_TYPE_DATA_SUBTYPE_QOS_CF_ACK_CF_POLL_NO_DATADOT11_TYPE_RESERVED DOT11_SUBTYPE_RESERVED_RESERVED1 DOT11_SUBTYPE_RESERVED_RESERVED2 DOT11_SUBTYPE_RESERVED_RESERVED3 DOT11_SUBTYPE_RESERVED_RESERVED4 DOT11_SUBTYPE_RESERVED_RESERVED5 DOT11_SUBTYPE_RESERVED_RESERVED6 DOT11_SUBTYPE_RESERVED_RESERVED7 DOT11_SUBTYPE_RESERVED_RESERVED8 DOT11_SUBTYPE_RESERVED_RESERVED9!DOT11_SUBTYPE_RESERVED_RESERVED10!DOT11_SUBTYPE_RESERVED_RESERVED11!DOT11_SUBTYPE_RESERVED_RESERVED12!DOT11_SUBTYPE_RESERVED_RESERVED13!DOT11_SUBTYPE_RESERVED_RESERVED14!DOT11_SUBTYPE_RESERVED_RESERVED15!DOT11_SUBTYPE_RESERVED_RESERVED16%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED1%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED2%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED3%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED4%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED5%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED6%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED7%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED8%DOT11_TYPE_RESERVED_SUBTYPE_RESERVED9&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED10&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED11&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED12&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED13&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED14&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED15&DOT11_TYPE_RESERVED_SUBTYPE_RESERVED16rm   rm   rm   rn   ro   V   s   

































































































































ro   c                   @   s  e Zd ZdCddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?d@ Z!dDdAdBZ"dS )EDot11NTc                 C   sB   d}|  | _ | j rd}nd}t| || |r| | d S d S )Nr   r	   r   )_Dot11__FCS_at_endr   __init__load_packet)selfaBuffer
FCS_at_endheader_size	tail_sizerm   rm   rn   r  $  s   
zDot11.__init__c                 C      | j d}|d? d@ S )z!Return 802.11 frame 'Order' fieldr   r   headerget_byter
  brm   rm   rn   	get_order0     zDot11.get_orderc                 C   6   d}| j d|@ }||d@ d> B }| j d| dS )zSet 802.11 frame 'Order' field   r   r   Nr  r  set_byter
  valuemaskmaskednbrm   rm   rn   	set_order5     zDot11.set_orderc                 C   r  )z%Return 802.11 frame 'Protected' fieldr   r   r  r  rm   rm   rn   get_protectedFrame>  r  zDot11.get_protectedFramec                 C   r  )z(Set 802.11 frame 'Protected Frame' field   r   r   Nr  r  rm   rm   rn   set_protectedFrameC  r!  zDot11.set_protectedFramec                 C   r  )z%Return 802.11 frame 'More Data' fieldr   r
   r  r  rm   rm   rn   get_moreDataL  r  zDot11.get_moreDatac                 C   r  )z"Set 802.11 frame 'More Data' field   r   r
   Nr  r  rm   rm   rn   set_moreDataQ  r!  zDot11.set_moreDatac                 C   r  )z,Return 802.11 frame 'Power Management' fieldr   r	   r  r  rm   rm   rn   get_powerManagementZ  r  zDot11.get_powerManagementc                 C   r  )z)Set 802.11 frame 'Power Management' field   r   r	   Nr  r  rm   rm   rn   set_powerManagement_  r!  zDot11.set_powerManagementc                 C   r  )z!Return 802.11 frame 'Retry' fieldr   r   r  r  rm   rm   rn   	get_retryh  r  zDot11.get_retryc                 C   r  )zSet 802.11 frame 'Retry' field   r   r   Nr  r  rm   rm   rn   	set_retrym  r!  zDot11.set_retryc                 C   r  )z*Return 802.11 frame 'More Fragments' fieldr   r   r  r  rm   rm   rn   get_moreFragv  r  zDot11.get_moreFragc                 C   r  )z'Set 802.11 frame 'More Fragments' field   r   r   Nr  r  rm   rm   rn   set_moreFrag{  r!  zDot11.set_moreFragc                 C   s   | j d}|d? d@ S )z#Return 802.11 frame 'from DS' fieldr   r  r  rm   rm   rn   
get_fromDS  r  zDot11.get_fromDSc                 C   s6   d}| j d|@ }||d@ d> B }| j d| dS )z Set 802.11 frame 'from DS' field   r   Nr  r  rm   rm   rn   
set_fromDS  r!  zDot11.set_fromDSc                 C   s   | j d}|d@ S )z!Return 802.11 frame 'to DS' fieldr   r  r  rm   rm   rn   get_toDS     zDot11.get_toDSc                 C   s2   d}| j d|@ }||d@ B }| j d| dS )zSet 802.11 frame 'to DS' field   r   Nr  r  rm   rm   rn   set_toDS     zDot11.set_toDSc                 C      | j d}|d? d@ S )z#Return 802.11 frame 'subtype' fieldr   r	      r  r  rm   rm   rn   get_subtype  r  zDot11.get_subtypec                 C   6   d}| j d|@ }||d> d@ B }| j d| dS )z Set 802.11 frame 'subtype' fieldr:  r   r	      Nr  r  rm   rm   rn   set_subtype  r!  zDot11.set_subtypec                 C   r9  )z Return 802.11 frame 'type' fieldr   r   r   r  r  rm   rm   rn   get_type  r  zDot11.get_typec                 C   r<  )zSet 802.11 frame 'type' field   r   r   r   Nr  r  rm   rm   rn   set_type  r!  zDot11.set_typec                 C   r9  )z,Return 802.11 frame 'Type and Subtype' fieldr   r   ?   r  r  rm   rm   rn   get_type_n_subtype  r  zDot11.get_type_n_subtypec                 C   r<  )z)Set 802.11 frame 'Type and Subtype' fieldr   r   r      Nr  r  rm   rm   rn   set_type_n_subtype  r!  zDot11.set_type_n_subtypec                 C      | j d}|d@ S )z4Return 802.11 frame control 'Protocol version' fieldr   r   r  r  rm   rm   rn   get_version  r5  zDot11.get_versionc                 C   s2   d}| j d|@ }||d@ B }| j d| dS )z5Set the 802.11 frame control 'Protocol version' fieldrD  r   r   Nr  r  rm   rm   rn   set_version  r8  zDot11.set_versionc                 C   s*   t |d@ }td|}td|\}|S N    <L!L)r   structpackunpack)r
  bytescrclecrccrc_longrm   rm   rn   compute_checksum  s   zDot11.compute_checksumc                 C      | j d}|d@ odS )z*Return 'True' if is an QoS data frame typer   r.   Tr  r  rm   rm   rn   is_QoS_frame     zDot11.is_QoS_framec                 C   rU  )z/Return 'True' if it frame contain no Frame Bodyr   r   Tr  r  rm   rm   rn   is_no_framebody_frame  rW  zDot11.is_no_framebody_framec                 C   rU  )z,Return 'True' if it frame is a CF_POLL framer       Tr  r  rm   rm   rn   is_cf_poll_frame  rW  zDot11.is_cf_poll_framec                 C   rU  )z+Return 'True' if it frame is a CF_ACK framer      Tr  r  rm   rm   rn   is_cf_ack_frame  rW  zDot11.is_cf_ack_framec                 C   s   | j sdS | jdd}|S )zReturn 802.11 'FCS' fieldN>)r  tailget_longr  rm   rm   rn   get_fcs  s   zDot11.get_fcsc                 C   sB   | j sdS |du r|  }| |}|}|d@ }| jd| dS )zPSet the 802.11 CTS control frame 'FCS' field. If value is None, is auto_checksumNrJ  r]  )r  get_body_as_stringrT  r_  set_long)r
  r  payloadr   r  rm   rm   rn   set_fcs  s   
zDot11.set_fcs)NTN)#rY   rZ   r[   r  r  r   r"  r$  r%  r'  r(  r*  r+  r-  r.  r0  r1  r3  r4  r7  r;  r>  r?  rA  rC  rE  rG  rH  rT  rV  rX  rZ  r\  ra  re  rm   rm   rm   rn   r  #  sB    
													r  c                   @   :   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdS )Dot11ControlFrameCTSz"802.11 Clear-To-Send Control FrameNc                 C   ,   d}d}t | || |r| | d S d S Nr   r   r   r  r	  r
  r  r  r  rm   rm   rn   r       zDot11ControlFrameCTS.__init__c                 C      | j dd}|S )z0Return 802.11 CTS control frame 'Duration' fieldr   <r  get_wordr  rm   rm   rn   get_duration     z!Dot11ControlFrameCTS.get_durationc                 C      |d@ }| j d|d dS )z1Set the 802.11 CTS control frame 'Duration' field  r   ro  Nr  set_wordr
  r  r  rm   rm   rn   set_duration!     z!Dot11ControlFrameCTS.set_durationc                 C      | j  dd S )zRReturn 802.11 CTS control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r  	get_bytesr
  rm   rm   rn   get_ra'     zDot11ControlFrameCTS.get_rac                 C   *   t ddD ]}| jd| ||  qdS )zOSet 802.11 CTS control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r   Nranger  r  r
  r  irm   rm   rn   set_ra+     zDot11ControlFrameCTS.set_rarf  	rY   rZ   r[   __doc__r  rr  ry  r  r  rm   rm   rm   rn   rh        
rh  c                   @   rg  )Dot11ControlFrameACKz$802.11 Acknowledgement Control FrameNc                 C   ri  rj  rk  rl  rm   rm   rn   r  3  rm  zDot11ControlFrameACK.__init__c                 C   rn  )z0Return 802.11 ACK control frame 'Duration' fieldr   ro  rp  r  rm   rm   rn   rr  ;  rs  z!Dot11ControlFrameACK.get_durationc                 C   rt  )z1Set the 802.11 ACK control frame 'Duration' fieldru  r   ro  Nrv  rx  rm   rm   rn   ry  @  rz  z!Dot11ControlFrameACK.set_durationc                 C   r{  )zRReturn 802.11 ACK control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   r  F  r  zDot11ControlFrameACK.get_rac                 C   r  )zOSet 802.11 ACK control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r  J  r  zDot11ControlFrameACK.set_rarf  r  rm   rm   rm   rn   r  0  r  r  c                   @   J   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )Dot11ControlFrameRTSz$802.11 Request-To-Send Control FrameNc                 C   ri  Nr   r   rk  rl  rm   rm   rn   r  R  rm  zDot11ControlFrameRTS.__init__c                 C   rn  )z0Return 802.11 RTS control frame 'Duration' fieldr   ro  rp  r  rm   rm   rn   rr  Z  rs  z!Dot11ControlFrameRTS.get_durationc                 C   rt  )z1Set the 802.11 RTS control frame 'Duration' fieldru  r   ro  Nrv  rx  rm   rm   rn   ry  _  rz  z!Dot11ControlFrameRTS.set_durationc                 C   r{  )zRReturn 802.11 RTS control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   r  e  r  zDot11ControlFrameRTS.get_rac                 C   r  )zOSet 802.11 RTS control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r  i  r  zDot11ControlFrameRTS.set_rac                 C   r{  )zUReturn 802.11 RTS control frame 48 bit 'Transmitter Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   get_tan  r  zDot11ControlFrameRTS.get_tac                 C   r  )zRSet 802.11 RTS control frame 48 bit 'Transmitter Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   set_tar  r  zDot11ControlFrameRTS.set_tarf  )rY   rZ   r[   r  r  rr  ry  r  r  r  r  rm   rm   rm   rn   r  O      
r  c                   @   r  )Dot11ControlFramePSPollz$802.11 Power-Save Poll Control FrameNc                 C   ri  r  rk  rl  rm   rm   rn   r  z  rm  z Dot11ControlFramePSPoll.__init__c                 C   rn  )z.Return 802.11 PSPoll control frame 'AID' fieldr   ro  rp  r  rm   rm   rn   get_aid     zDot11ControlFramePSPoll.get_aidc                 C   rt  )z/Set the 802.11 PSPoll control frame 'AID' fieldru  r   ro  Nrv  rx  rm   rm   rn   set_aid  s   zDot11ControlFramePSPoll.set_aidc                 C   r{  )zKReturn 802.11 PSPoll control frame 48 bit 'BSS ID' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   	get_bssid  r  z!Dot11ControlFramePSPoll.get_bssidc                 C   r  )zHSet 802.11 PSPoll control frame 48 bit 'BSS ID' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   	set_bssid  r  z!Dot11ControlFramePSPoll.set_bssidc                 C   r{  )zXReturn 802.11 PSPoll control frame 48 bit 'Transmitter Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   r    r  zDot11ControlFramePSPoll.get_tac                 C   r  )zUSet 802.11 PSPoll control frame 48 bit 'Transmitter Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r    r  zDot11ControlFramePSPoll.set_tarf  )rY   rZ   r[   r  r  r  r  r  r  r  r  rm   rm   rm   rn   r  w  s    
r  c                   @   r  )Dot11ControlFrameCFEndz*802.11 'Contention Free End' Control FrameNc                 C   ri  r  rk  rl  rm   rm   rn   r    rm  zDot11ControlFrameCFEnd.__init__c                 C   rn  )z3Return 802.11 CF-End control frame 'Duration' fieldr   ro  rp  r  rm   rm   rn   rr    rs  z#Dot11ControlFrameCFEnd.get_durationc                 C   rt  )z4Set the 802.11 CF-End control frame 'Duration' fieldru  r   ro  Nrv  rx  rm   rm   rn   ry    rz  z#Dot11ControlFrameCFEnd.set_durationc                 C   r{  )zUReturn 802.11 CF-End control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   r    r  zDot11ControlFrameCFEnd.get_rac                 C   r  )zRSet 802.11 CF-End control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r    r  zDot11ControlFrameCFEnd.set_rac                 C   r{  )zKReturn 802.11 CF-End control frame 48 bit 'BSS ID' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   r    r  z Dot11ControlFrameCFEnd.get_bssidc                 C   r  )zHSet 802.11 CF-End control frame 48 bit 'BSS ID' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r    r  z Dot11ControlFrameCFEnd.set_bssidrf  rY   rZ   r[   r  r  rr  ry  r  r  r  r  rm   rm   rm   rn   r    r  r  c                   @   r  )Dot11ControlFrameCFEndCFACKz&802.11 'CF-End + CF-ACK' Control FrameNc                 C   ri  r  rk  rl  rm   rm   rn   r    rm  z$Dot11ControlFrameCFEndCFACK.__init__c                 C   rn  )z<Return 802.11 'CF-End+CF-ACK' control frame 'Duration' fieldr   ro  rp  r  rm   rm   rn   rr    rs  z(Dot11ControlFrameCFEndCFACK.get_durationc                 C   rt  )z=Set the 802.11 'CF-End+CF-ACK' control frame 'Duration' fieldru  r   ro  Nrv  rx  rm   rm   rn   ry    rz  z(Dot11ControlFrameCFEndCFACK.set_durationc                 C   r{  )z^Return 802.11 'CF-End+CF-ACK' control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   r    r  z"Dot11ControlFrameCFEndCFACK.get_rac                 C   r  )z[Set 802.11 'CF-End+CF-ACK' control frame 48 bit 'Receiver Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r    r  z"Dot11ControlFrameCFEndCFACK.set_rac                 C   r{  )zTReturn 802.11 'CF-End+CF-ACK' control frame 48 bit 'BSS ID' field as a 6 bytes arrayr   r[  r|  r~  rm   rm   rn   r    r  z%Dot11ControlFrameCFEndCFACK.get_bssidc                 C   r  )zQSet 802.11 'CF-End+CF-ACK' control frame 48 bit 'BSS ID' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r    r  z%Dot11ControlFrameCFEndCFACK.set_bssidrf  r  rm   rm   rm   rn   r    r  r  c                   @      e Zd ZdZd%ddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ ZdS )&Dot11DataFramez802.11 Data FrameNc                 C   ri  N   r   rk  rl  rm   rm   rn   r    rm  zDot11DataFrame.__init__c                 C   rn  )z0Return 802.11 'Data' data frame 'Duration' fieldr   ro  rp  r  rm   rm   rn   rr    rs  zDot11DataFrame.get_durationc                 C   rt  )z1Set the 802.11 'Data' data frame 'Duration' fieldru  r   ro  Nrv  rx  rm   rm   rn   ry    rz  zDot11DataFrame.set_durationc                 C   r{  )zJReturn 802.11 'Data' data frame 48 bit 'Address1' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   get_address1	  r  zDot11DataFrame.get_address1c                 C   r  )zGSet 802.11 'Data' data frame 48 bit 'Address1' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   set_address1  r  zDot11DataFrame.set_address1c                 C   r{  )zJReturn 802.11 'Data' data frame 48 bit 'Address2' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   get_address2  r  zDot11DataFrame.get_address2c                 C   r  )zGSet 802.11 'Data' data frame 48 bit 'Address2' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   set_address2  r  zDot11DataFrame.set_address2c                 C   r{  )zJReturn 802.11 'Data' data frame 48 bit 'Address3' field as a 6 bytes arrayr      r|  r~  rm   rm   rn   get_address3  r  zDot11DataFrame.get_address3c                 C   r  )zGSet 802.11 'Data' data frame 48 bit 'Address3' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   set_address3  r  zDot11DataFrame.set_address3c                 C   rn  )z8Return 802.11 'Data' data frame 'Sequence Control' fieldr  ro  rp  r  rm   rm   rn   get_sequence_control$  rs  z#Dot11DataFrame.get_sequence_controlc                 C   rt  )z9Set the 802.11 'Data' data frame 'Sequence Control' fieldru  r  ro  Nrv  rx  rm   rm   rn   set_sequence_control)  rz  z#Dot11DataFrame.set_sequence_controlc                 C   s   | j dd}|d@ S )z:Return 802.11 'Data' data frame 'Fragment Number' subfieldr  ro  r:  rp  r  rm   rm   rn   get_fragment_number/  s   z"Dot11DataFrame.get_fragment_numberc                 C   6   d}| j dd|@ }||d@ B }| j d|d dS )z;Set the 802.11 'Data' data frame 'Fragment Number' subfield  r  ro  r:  Nr  rq  rw  r  rm   rm   rn   set_fragment_number5     z"Dot11DataFrame.set_fragment_numberc                 C   s   | j dd}|d? d@ S )z:Return 802.11 'Data' data frame 'Sequence Number' subfieldr  ro  r	     rp  r  rm   rm   rn   get_sequence_number>  s   z"Dot11DataFrame.get_sequence_numberc                 C   :   d}| j dd|@ }||d@ d> B }| j d|d dS )z;Set the 802.11 'Data' data frame 'Sequence Number' subfieldr:  r  ro  r  r	   Nr  r  rm   rm   rn   set_sequence_numberD     z"Dot11DataFrame.set_sequence_numberc                 C      |   S )z2Return 802.11 'Data' data frame 'Frame Body' fieldrb  r~  rm   rm   rn   get_frame_bodyM     zDot11DataFrame.get_frame_bodyc                 C      |  | dS )z/Set 802.11 'Data' data frame 'Frame Body' fieldN	load_bodyr
  datarm   rm   rn   set_frame_bodyR     zDot11DataFrame.set_frame_bodyrf  )rY   rZ   r[   r  r  rr  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rm   rm   rm   rn   r    &    
		r  c                   @   *   e Zd ZdZd	ddZdd Zdd ZdS )
Dot11DataQoSFramez802.11 Data QoS FrameNc                 C   ri  )N   r   rk  rl  rm   rm   rn   r  Z  rm  zDot11DataQoSFrame.__init__c                 C   rn  )+Return 802.11 'Data' data frame 'QoS' fieldr  ro  rp  r  rm   rm   rn   get_QoSb  rs  zDot11DataQoSFrame.get_QoSc                 C   rt  ),Set the 802.11 'Data' data frame 'QoS' fieldru  r  ro  Nrv  rx  rm   rm   rn   set_QoSg  rz  zDot11DataQoSFrame.set_QoSrf  rY   rZ   r[   r  r  r  r  rm   rm   rm   rn   r  W  
    
r  c                   @   r  )
Dot11DataAddr4Framez7802.11 Data With ToDS From DS Flags (With Addr 4) FrameNc                 C   ri  )N   r   rk  rl  rm   rm   rn   r  p  rm  zDot11DataAddr4Frame.__init__c                 C   r{  )zJReturn 802.11 'Data' data frame 48 bit 'Address4' field as a 6 bytes arrayr  r  r|  r~  rm   rm   rn   get_address4x  r  z Dot11DataAddr4Frame.get_address4c                 C   r  )zGSet 802.11 'Data' data frame 48 bit 'Address4' field as a 6 bytes arrayr   r   r  Nr  r  rm   rm   rn   set_address4|  r  z Dot11DataAddr4Frame.set_address4rf  )rY   rZ   r[   r  r  r  r  rm   rm   rm   rn   r  m  
    
r  c                   @   r  )
Dot11DataAddr4QoSFramez?802.11 Data With ToDS From DS Flags (With Addr 4) and QoS FrameNc                 C   ri  )N   r   rk  rl  rm   rm   rn   r    rm  zDot11DataAddr4QoSFrame.__init__c                 C   rn  )r  r  ro  rp  r  rm   rm   rn   r    rs  zDot11DataAddr4QoSFrame.get_QoSc                 C   rt  )r  ru  r  ro  Nrv  rx  rm   rm   rn   r    rz  zDot11DataAddr4QoSFrame.set_QoSrf  r  rm   rm   rm   rn   r    r  r  c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#S )$SAPTypesr   r   r	   r   r   r   r   r[  r  r  rY  r   r   B   N   T   r-   r.   r/   r1         r:   rC            r=           rD  r6     N)%rY   rZ   r[   NULL
LLC_SLMGMTSNA_PATHCTRLIPSNA1SNA2PROWAY_NM_INITNETWARE1OSINL1TIOSINL2OSINL3SNA3BPDURS511OSINL4X25XNSBACNETNESTARPROWAY_ASLMARPSNAPHPJDVINES1VINES2NETWARE2NETBIOSIBMNMHPEXTUBRPLOSINL5GLOBALrm   rm   rm   rn   r    sF    r  c                   @   sN   e Zd ZdZdZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdS )LLCz&802.2 Logical Link Control (LLC) Framer   Nc                 C   ri  )Nr   r   rk  rl  rm   rm   rn   r    rm  zLLC.__init__c                 C      | j dS )z=Get the Destination Service Access Point (SAP) from LLC framer   r  r~  rm   rm   rn   get_DSAP     zLLC.get_DSAPc                 C      | j d| dS )z;Set the Destination Service Access Point (SAP) of LLC framer   Nr  r  r
  r  rm   rm   rn   set_DSAP  r  zLLC.set_DSAPc                 C   r  )z8Get the Source Service Access Point (SAP) from LLC framer   r  r~  rm   rm   rn   get_SSAP  r  zLLC.get_SSAPc                 C   r  )z6Set the Source Service Access Point (SAP) of LLC framer   Nr  r  rm   rm   rn   set_SSAP  r  zLLC.set_SSAPc                 C   r  )z$Get the Control field from LLC framer   r  r~  rm   rm   rn   get_control  r  zLLC.get_controlc                 C   r  )z"Set the Control field of LLC framer   Nr  r  rm   rm   rn   set_control  r  zLLC.set_controlrf  )rY   rZ   r[   r  DLC_UNNUMBERED_FRAMESr  r   r  r  r  r  r	  rm   rm   rm   rn   r    s    
r  c                   @   rg  )r  z-802.2 SubNetwork Access Protocol (SNAP) FrameNc                 C   ri  )Nr
   r   rk  rl  rm   rm   rn   r    rm  zSNAP.__init__c                 C   ,   t | j dd }tdd| \}|S )zGGet the three-octet Organizationally Unique Identifier (OUI) SNAP framer   r   rL      r   r  r}  rM  rO  )r
  r  ouirm   rm   rn   get_OUI     zSNAP.get_OUIc                 C   8   d}| j dd|@ }||d@ d> B }| j d| dS )zGSet the three-octet Organizationally Unique Identifier (OUI) SNAP framer  r   r^   r   Nr  r`  rc  r  rm   rm   rn   set_OUI     zSNAP.set_OUIc                 C      | j ddS )z6Get the two-octet Protocol Identifier (PID) SNAP fieldr   r^  rp  r~  rm   rm   rn   get_protoID     zSNAP.get_protoIDc                 C      | j d|d dS )z6Set the two-octet Protocol Identifier (PID) SNAP fieldr   r^  Nrv  r  rm   rm   rn   set_protoID     zSNAP.set_protoIDrf  )	rY   rZ   r[   r  r  r  r  r  r  rm   rm   rm   rn   r    s    
	r  c                   @   sZ   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )Dot11WEPz
802.11 WEPNc                 C   ri  )Nr	   r   rk  rl  rm   rm   rn   r    rm  zDot11WEP.__init__c                 C   s   | j d}|d@  S )zReturn True if it's a WEPr   rY  r  r  rm   rm   rn   is_WEP  s   
zDot11WEP.is_WEPc                 C   r  )zReturn the 'WEP IV' fieldr   r   rL  r  r  )r
  r  ivrm   rm   rn   get_iv  r  zDot11WEP.get_ivc                 C   r  )zSet the 'WEP IV' field.r  r   r^  r  r   Nr  r  rm   rm   rn   set_iv  r  zDot11WEP.set_ivc                 C   r  )zReturn the 'WEP KEY ID' fieldr   r   r  r  rm   rm   rn   	get_keyid&  r  zDot11WEP.get_keyidc                 C   r  )zSet the 'WEP KEY ID' fieldrB  r   r   Nr  r  rm   rm   rn   	set_keyid+  r!  zDot11WEP.set_keyidc                 C   sL   t | jdk r
| jS td|  dd }|| }t|}|| j}|S )z!Return 'WEP Data' field decryptedr   z>LN)lenbody_stringrM  rN  r  r   decrypt)r
  
key_stringr  keyrc4decrypted_datarm   rm   rn   get_decrypted_data4  s   zDot11WEP.get_decrypted_datac                 C   s
   |  |S rf  )r+  )r
  r'  rm   rm   rn   get_encrypted_dataF  s   
zDot11WEP.get_encrypted_datac                 C   s   |  |}| | d S rf  )r,  r  )r
  r'  encrm   rm   rn   encrypt_frameJ  s   
zDot11WEP.encrypt_framerf  )rY   rZ   r[   r  r  r  r  r   r!  r"  r+  r,  r.  rm   rm   rm   rn   r    s    
		r  c                   @   <   e Zd ZdZdddZdd ZdddZd	d
 Zdd ZdS )Dot11WEPDataz802.11 WEP Data PartNc                 C   ri  )Nr   r	   rk  rl  rm   rm   rn   r  Q  rm  zDot11WEPData.__init__c                 C   rn  )zReturn 'WEP ICV' fieldr]  r^  r_  r`  r  rm   rm   rn   get_icvY     zDot11WEPData.get_icvc                 C   s*   |du r|   }|d@ }| jd| dS )zSet 'WEP ICV' fieldNrJ  r]  )get_computed_icvr_  rc  rx  rm   rm   rn   set_icv_  s   zDot11WEPData.set_icvc                 C   s,   t | jd@ }td|}td|\}|S rI  )r   r%  rM  rN  rO  )r
  rQ  rR  rS  rm   rm   rn   r4  j  s   zDot11WEPData.get_computed_icvc                 C   s    |   }|  }||krdS dS )NTF)r4  r2  )r
  computed_icvcurrent_icvrm   rm   rn   	check_icvr  s
   zDot11WEPData.check_icvrf  )	rY   rZ   r[   r  r  r2  r5  r4  r8  rm   rm   rm   rn   r0  N  s    

r0  c                   @   s   e Zd ZdZd-ddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, ZdS ).Dot11WPAz
802.11 WPANc                 C   ri  rj  rk  rl  rm   rm   rn   r  }  rm  zDot11WPA.__init__c                 C   s$   |   |  dB d@ k}|o|  S )zReturn True if it's a WPArY  r  )get_WEPSeedget_TSC1	get_extIVr  rm   rm   rn   is_WPA  s   zDot11WPA.is_WPAc                 C   r  )zReturn the 'WPA KEY ID' fieldr   r   r  r  rm   rm   rn   r!    r  zDot11WPA.get_keyidc                 C   r  )zSet the 'WPA KEY ID' fieldrB  r   r   Nr  r  rm   rm   rn   r"    r!  zDot11WPA.set_keyidc                 C      | j S )z!Return 'WPA Data' field decryptedr%  r~  rm   rm   rn   r+       zDot11WPA.get_decrypted_datac                 C   rF  )zReturn the 'WPA TSC1' fieldr   r  r  r  rm   rm   rn   r;    r5  zDot11WPA.get_TSC1c                 C      |d@ }| j d| dS )zSet the 'WPA TSC1' fieldr  r   Nr  rx  rm   rm   rn   set_TSC1     zDot11WPA.set_TSC1c                 C   rF  )zReturn the 'WPA WEPSeed' fieldr   r  r  r  rm   rm   rn   r:    r5  zDot11WPA.get_WEPSeedc                 C   rA  )zSet the 'WPA WEPSeed' fieldr  r   Nr  rx  rm   rm   rn   set_WEPSeed  rC  zDot11WPA.set_WEPSeedc                 C   rF  )zReturn the 'WPA TSC0' fieldr   r  r  r  rm   rm   rn   get_TSC0  r5  zDot11WPA.get_TSC0c                 C   rA  )zSet the 'WPA TSC0' fieldr  r   Nr  rx  rm   rm   rn   set_TSC0  rC  zDot11WPA.set_TSC0c                 C   r9  )zReturn the 'WPA extID' fieldr   r
   r   r  r  rm   rm   rn   r<    r  zDot11WPA.get_extIVc                 C   6   d}| j d|@ }||d@ d> B }| j d| dS )zSet the 'WPA extID' fieldr&  r   r   r
   Nr  r  rm   rm   rn   	set_extIV  r!  zDot11WPA.set_extIVc                 C   rF  )zReturn the 'WPA TSC2' fieldr	   r  r  r  rm   rm   rn   get_TSC2  r5  zDot11WPA.get_TSC2c                 C   rA  )zSet the 'WPA TSC2' fieldr  r	   Nr  rx  rm   rm   rn   set_TSC2  rC  zDot11WPA.set_TSC2c                 C   rF  )zReturn the 'WPA TSC3' fieldr
   r  r  r  rm   rm   rn   get_TSC3  r5  zDot11WPA.get_TSC3c                 C   rA  )zSet the 'WPA TSC3' fieldr  r
   Nr  rx  rm   rm   rn   set_TSC3  rC  zDot11WPA.set_TSC3c                 C   rF  )zReturn the 'WPA TSC4' fieldr   r  r  r  rm   rm   rn   get_TSC4  r5  zDot11WPA.get_TSC4c                 C   rA  )zSet the 'WPA TSC4' fieldr  r   Nr  rx  rm   rm   rn   set_TSC4  rC  zDot11WPA.set_TSC4c                 C   rF  )zReturn the 'WPA TSC5' fieldr   r  r  r  rm   rm   rn   get_TSC5  r5  zDot11WPA.get_TSC5c                 C   rA  )zSet the 'WPA TSC5' fieldr  r   Nr  rx  rm   rm   rn   set_TSC5  rC  zDot11WPA.set_TSC5rf  )rY   rZ   r[   r  r  r=  r!  r"  r+  r;  rB  r:  rD  rE  rF  r<  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rm   rm   rm   rn   r9  z  s.    
		r9  c                   @   r/  )Dot11WPADataz802.11 WPA Data PartNc                 C   ri  )Nr   r   rk  rl  rm   rm   rn   r    rm  zDot11WPAData.__init__c                 C   rn  )zReturn 'WPA ICV' fieldr]  r^  r1  r  rm   rm   rn   r2    r3  zDot11WPAData.get_icvc                 C   s.   |du r
|  | j}|d@ }| jd| dS )zSet 'WPA ICV' fieldNrJ  r]  )rT  r%  r_  rc  rx  rm   rm   rn   r5    s   zDot11WPAData.set_icvc                 C   s   |   dd S )Return the 'WPA2Data MIC' fieldNr   get_tail_as_stringr~  rm   rm   rn   get_MIC  s   zDot11WPAData.get_MICc                 C   s>   | dd |dd }| j dd }| j||  dS )Set the 'WPA2Data MIC' fieldr   r  Nr]  )ljustr_  get_buffer_as_stringset_bytes_from_string)r
  r  icvrm   rm   rn   set_MIC  s   zDot11WPAData.set_MICrf  )	rY   rZ   r[   r  r  r2  r5  rU  r[  rm   rm   rm   rn   rQ    s    

rQ  c                   @   s   e Zd ZdZd)ddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( ZdS )*	Dot11WPA2z802.11 WPA2Nc                 C   ri  rj  rk  rl  rm   rm   rn   r  &  rm  zDot11WPA2.__init__c                 C   s&   |   |  dB d@ k}| o|  S )zReturn True if it's a WPA2rY  r  )get_PN1get_PN0r<  r  rm   rm   rn   is_WPA2.  s   zDot11WPA2.is_WPA2c                 C   r9  )zReturn the 'WPA2 extID' fieldr   r
   r   r  r  rm   rm   rn   r<  6  r  zDot11WPA2.get_extIVc                 C   rG  )zSet the 'WPA2 extID' fieldr&  r   r   r
   Nr  r  rm   rm   rn   rH  ;  r!  zDot11WPA2.set_extIVc                 C   r  )zReturn the 'WPA2 KEY ID' fieldr   r   r  r  rm   rm   rn   r!  D  r  zDot11WPA2.get_keyidc                 C   r  )zSet the 'WPA2 KEY ID' fieldrB  r   r   Nr  r  rm   rm   rn   r"  I  r!  zDot11WPA2.set_keyidc                 C   r>  )z"Return 'WPA2 Data' field decryptedr?  r~  rm   rm   rn   r+  R  r@  zDot11WPA2.get_decrypted_datac                 C   rF  )zReturn the 'WPA2 PN0' fieldr   r  r  r  rm   rm   rn   r^  W  r5  zDot11WPA2.get_PN0c                 C   rA  )zSet the 'WPA2 PN0' fieldr  r   Nr  rx  rm   rm   rn   set_PN0\  rC  zDot11WPA2.set_PN0c                 C   rF  )zReturn the 'WPA2 PN1' fieldr   r  r  r  rm   rm   rn   r]  b  r5  zDot11WPA2.get_PN1c                 C   rA  )zSet the 'WPA2 PN1' fieldr  r   Nr  rx  rm   rm   rn   set_PN1g  rC  zDot11WPA2.set_PN1c                 C   rF  )zReturn the 'WPA2 PN2' fieldr	   r  r  r  rm   rm   rn   get_PN2m  r5  zDot11WPA2.get_PN2c                 C   rA  )zSet the 'WPA2 PN2' fieldr  r	   Nr  rx  rm   rm   rn   set_PN2r  rC  zDot11WPA2.set_PN2c                 C   rF  )zReturn the 'WPA2 PN3' fieldr
   r  r  r  rm   rm   rn   get_PN3x  r5  zDot11WPA2.get_PN3c                 C   rA  )zSet the 'WPA2 PN3' fieldr  r
   Nr  rx  rm   rm   rn   set_PN3}  rC  zDot11WPA2.set_PN3c                 C   rF  )zReturn the 'WPA2 PN4' fieldr   r  r  r  rm   rm   rn   get_PN4  r5  zDot11WPA2.get_PN4c                 C   rA  )zSet the 'WPA2 PN4' fieldr  r   Nr  rx  rm   rm   rn   set_PN4  rC  zDot11WPA2.set_PN4c                 C   rF  )zReturn the 'WPA2 PN5' fieldr   r  r  r  rm   rm   rn   get_PN5  r5  zDot11WPA2.get_PN5c                 C   rA  )zSet the 'WPA2 PN5' fieldr  r   Nr  rx  rm   rm   rn   set_PN5  rC  zDot11WPA2.set_PN5rf  )rY   rZ   r[   r  r  r_  r<  rH  r!  r"  r+  r^  r`  r]  ra  rb  rc  rd  re  rf  rg  rh  ri  rm   rm   rm   rn   r\  #  s*    
		r\  c                   @   r  )
Dot11WPA2Dataz802.11 WPA2 Data PartNc                 C   ri  )Nr   r   rk  rl  rm   rm   rn   r    rm  zDot11WPA2Data.__init__c                 C   r  )rR  rS  r~  rm   rm   rn   rU    s   zDot11WPA2Data.get_MICc                 C   s(   | dd |dd }| j| dS )rV  r   r  N)rW  r_  rY  r  rm   rm   rn   r[    s   zDot11WPA2Data.set_MICrf  )rY   rZ   r[   r  r  rU  r[  rm   rm   rm   rn   rj    r  rj  c                   @   s@  e Zd ZdZdZ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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 Zejd-d. d/ dd1d2Zd3d4 Z d5d6 Z!d7d8 Z"efd9d:Z#d;d< Z$dd=d>Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)dGdH Z*dIdJ Z+dKdL Z,dMdN Z-dOdP Z.dQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4d]d^ Z5d_d` Z6dadb Z7dcdd Z8dedf Z9dgdh Z:didj Z;dkdl Z<dmdn Z=dodp Z>dqdr Z?dsdt Z@dudv ZAdwdx ZBdydz ZCd{d| ZDd}d~ ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUd0S )RadioTapr   r	   c                   @   s   e Zd ZdZdd ZdS )zRadioTap.__RadioTapFieldr   c                 C   s   t | jjS rf  )str	__class__rY   r~  rm   rm   rn   __str__     z RadioTap.__RadioTapField.__str__N)rY   rZ   r[   	ALIGNMENTrn  rm   rm   rm   rn   __RadioTapField  s    rq  c                   @      e Zd ZdZdZdZdS )zRadioTap.RTF_TSFTr   z<Qr   NrY   rZ   r[   
BIT_NUMBER	STRUCTURErp  rm   rm   rm   rn   RTF_TSFT      rv  c                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
S )zRadioTap.RTF_FLAGSr   <Br   r	   r   r[  rY  r   r.   N)rY   rZ   r[   rt  ru  PROPERTY_CFPPROPERTY_SHORTPREAMBLEPROPERTY_WEPPROPERTY_FRAGMENTATIONPROPERTY_FCS_AT_ENDPROPERTY_PAYLOAD_PADDINGPROPERTY_BAD_FCSPROPERTY_SHORT_GIrm   rm   rm   rn   	RTF_FLAGS  s    r  c                   @      e Zd ZdZdZdS )zRadioTap.RTF_RATEr   rx  NrY   rZ   r[   rt  ru  rm   rm   rm   rn   RTF_RATE      r  c                   @   rr  )zRadioTap.RTF_CHANNELr   z<HHr   Nrs  rm   rm   rm   rn   RTF_CHANNEL  rw  r  c                   @   r  )zRadioTap.RTF_FHSSr	   z<BBNr  rm   rm   rm   rn   RTF_FHSS  r  r  c                   @   r  )zRadioTap.RTF_DBM_ANTSIGNALr
   rx  Nr  rm   rm   rm   rn   RTF_DBM_ANTSIGNAL  r  r  c                   @   r  )zRadioTap.RTF_DBM_ANTNOISEr   rx  Nr  rm   rm   rm   rn   RTF_DBM_ANTNOISE  r  r  c                   @   rr  )zRadioTap.RTF_LOCK_QUALITYr   <Hr   Nrs  rm   rm   rm   rn   RTF_LOCK_QUALITY  rw  r  c                   @   rr  )zRadioTap.RTF_TX_ATTENUATIONr   r  r   Nrs  rm   rm   rm   rn   RTF_TX_ATTENUATION  rw  r  c                   @   rr  )zRadioTap.RTF_DB_TX_ATTENUATIONr   r  r   Nrs  rm   rm   rm   rn   RTF_DB_TX_ATTENUATION  rw  r  c                   @   rr  )zRadioTap.RTF_DBM_TX_POWERr   z<br   Nrs  rm   rm   rm   rn   RTF_DBM_TX_POWER  rw  r  c                   @   r  )zRadioTap.RTF_ANTENNAr   rx  Nr  rm   rm   rm   rn   RTF_ANTENNA  r  r  c                   @   r  )zRadioTap.RTF_DB_ANTSIGNALr   rx  Nr  rm   rm   rm   rn   RTF_DB_ANTSIGNAL  r  r  c                   @   r  )zRadioTap.RTF_DB_ANTNOISEr   rx  Nr  rm   rm   rm   rn   RTF_DB_ANTNOISE  r  r  c                   @   rr  )zRadioTap.RTF_FCS_IN_HEADERr   rK  r	   Nrs  rm   rm   rm   rn   RTF_FCS_IN_HEADER
  rw  r  c                   @   rr  )zRadioTap.RTF_TX_FLAGSr:  r  r   Nrs  rm   rm   rm   rn   RTF_TX_FLAGS  rw  r  c                   @   r  )zRadioTap.RTF_RTS_RETRIESr[  rx  Nr  rm   rm   rm   rn   RTF_RTS_RETRIES  r  r  c                   @   r  )zRadioTap.RTF_DATA_RETRIES   rx  Nr  rm   rm   rm   rn   RTF_DATA_RETRIES&  r  r  c                   @   rr  )zRadioTap.RTF_XCHANNEL   z<LHBBr	   Nrs  rm   rm   rm   rn   RTF_XCHANNEL*  rw  r  c                   @   s   e Zd ZdZg ZdS )zRadioTap.RTF_EXT   Nr  rm   rm   rm   rn   RTF_EXT/  r  r  c                 C   r>  rf  )rt  )xrm   rm   rn   <lambda>5  s    zRadioTap.<lambda>)r(  Nc                 C   sl   | j }d}|r#td|dd d }|}t| || | | d S t| || | d | d d S )Nr   r  r   r	   )_RadioTap__HEADER_BASE_SIZErM  rO  r   r  r	  rH  _RadioTap__set_present)r
  r  r  r  lengthrm   rm   rn   r  7  s   
zRadioTap.__init__c                 C   s   |    | jddS )z)Return the RadioTap header 'length' fieldr   ro  )_RadioTap__update_header_lengthr  rq  r~  rm   rm   rn   get_header_lengthF  s   zRadioTap.get_header_lengthc                 C   s   | j d}|S )zReturn the 'version' fieldr   r  r  rm   rm   rn   rG  K  s   zRadioTap.get_versionc                 C   s"   |d@ }| j d| |d@ }dS )zSet the 'version' fieldr  r   Nr  rx  rm   rm   rn   rH  P  s   zRadioTap.set_versionc                 C   s   | j |d}|S )z$Return RadioTap present bitmap fieldro  )r  r`  )r
  offsetpresentrm   rm   rn   get_presentW  rs  zRadioTap.get_presentc                 C   r  )zSet RadioTap present field bitr	   N)r  rc  r  rm   rm   rn   __set_present\  r  zRadioTap.__set_presentc                 C   s   |  |}d|j |@   S )zGet a 'present' field bitr   )r  rt  )r
  fieldr  r  rm   rm   rn   get_present_bit`  s   
zRadioTap.get_present_bitc                 C   s&   d|j  |  B }| jd|d dS )zSet a 'present' field bitr   r	   ro  Nrt  r  r  rc  r
  r  npresentrm   rm   rn   __set_present_bite  s   zRadioTap.__set_present_bitc                 C   s(   d|j   |  @ }| jd|d dS )zUnset a 'present' field bitr   r	   ro  Nr  r  rm   rm   rn   __unset_present_bitj  s   zRadioTap.__unset_present_bitc                 C   s   ||d  |d  @ | S )Nr   rm   )r
  valalignrm   rm   rn   __aligno  s   zRadioTap.__alignc                 C   s   t j}d}| t j|r|t j7 }|d7 }| t j|s| jt j|  }| jD ]"}|| ||j7 }||kr:|  S | |rIt	
|j}||7 }q'd S )Nr   r   )rk  _BASE_PRESENT_FLAGS_OFFSETr  r  _PRESENT_FLAGS_SIZEr  radiotap_fields_RadioTap__alignrp  rM  calcsizeru  )r
  r  r  extra_present_flags_countfield_positionftotal_lengthrm   rm   rn   __get_field_positionr  s    


zRadioTap.__get_field_positionc                 C   sp   |  |}|du rdS | |}|sdS | | |  }t|j}|d | ||| d   }| | d S NF)r  _RadioTap__get_field_position_RadioTap__unset_present_bitget_header_as_stringrM  r  ru  load_header)r
  r  
is_presentbyte_posr  r  rm   rm   rn   unset_field  s   


zRadioTap.unset_fieldc                 C   sV   |  |}|du rd S | |}|  }t|j}||||  }t|j|}|S r  )r  r  r  rM  r  ru  rO  )r
  r  r  r  r  r  vfield_valuesrm   rm   rn   __get_field_values  s   

zRadioTap.__get_field_valuesc           	      C   s   t |ds	tdtddd |jD }t||kr*tdt|t|jf | |}|du r8| 	| | 
|}|  }t|j}tj|jg|R  }|du rf|d | | ||| d   }n|d | | ||d   }| | d S )	N__iter__zarg 'values' is not iterable c                 s   s    | ]	}|d vr|V  qdS )z=@!<>Nrm   ).0crm   rm   rn   	<genexpr>  s    z.RadioTap.__set_field_values.<locals>.<genexpr>zField %s has exactly %d itemsFT)hasattr	Exceptionr$  joinru  rl  rM  r  r  _RadioTap__set_present_bitr  r  rN  r  )	r
  r  values
num_fieldsr  r  r  r  new_strrm   rm   rn   __set_field_values  s    



"zRadioTap.__set_field_valuesc                 C   s   |  tj|g dS )zSet the Value in microseconds of the MAC's 64-bit 802.11 Time Synchronization Function timer when the first bit of the MPDU arrived at the MACN)_RadioTap__set_field_valuesrk  rv  r
  nvaluerm   rm   rn   set_tsft     zRadioTap.set_tsftc                 C   s   |  tj}|s
dS |d S )zGet the Value in microseconds of the MAC's 64-bit 802.11 Time Synchronization Function timer when the first bit of the MPDU arrived at the MACNr   )_RadioTap__get_field_valuesrk  rv  r
  r  rm   rm   rn   get_tsft     zRadioTap.get_tsftc                 C      |  | j|g dS )z6Set the properties of transmitted and received frames.N)r  r  r  rm   rm   rn   	set_flags  r  zRadioTap.set_flagsc                 C      |  | j}|s
dS |d S )z6Get the properties of transmitted and received frames.Nr   )r  r  r  rm   rm   rn   	get_flags  s   zRadioTap.get_flagsc                 C   r  )z)Set the TX/RX data rate in 500 Kbps unitsN)r  r  r  rm   rm   rn   set_rate     zRadioTap.set_ratec                 C   r  ))Get the TX/RX data rate in 500 Kbps unitsNr   )r  r  r  rm   rm   rn   get_rate     zRadioTap.get_ratec                 C      |  | j||g dS )z<Set the channel Tx/Rx frequency in MHz and the channel flagsN)r  r  )r
  freqflagsrm   rm   rn   set_channel     zRadioTap.set_channelc                 C      |  | j}|S )r  )r  r  r  rm   rm   rn   get_channel     zRadioTap.get_channelc                 C   r  )z8Set the hop set and pattern for frequency-hopping radiosN)r  r  )r
  hop_sethop_patternrm   rm   rn   set_FHSS  r  zRadioTap.set_FHSSc                 C   r  )z8Get the hop set and pattern for frequency-hopping radios)r  r  r  rm   rm   rn   get_FHSS  r  zRadioTap.get_FHSSc                 C   r  z^Set the RF signal power at the antenna, decibel difference from an arbitrary, fixed reference.N)r  r  r
  signalrm   rm   rn   set_dBm_ant_signal  r  zRadioTap.set_dBm_ant_signalc                 C   r  z^Get the RF signal power at the antenna, decibel difference from an arbitrary, fixed reference.Nr   )r  r  r  rm   rm   rn   get_dBm_ant_signal     zRadioTap.get_dBm_ant_signalc                 C   r  z]Set the RF noise power at the antenna, decibel difference from an arbitrary, fixed reference.N)r  r  r  rm   rm   rn   set_dBm_ant_noise  r  zRadioTap.set_dBm_ant_noisec                 C   r  z]Get the RF noise power at the antenna, decibel difference from an arbitrary, fixed reference.Nr   )r  r  r  rm   rm   rn   get_dBm_ant_noise  r  zRadioTap.get_dBm_ant_noisec                 C   r  )zLSet the quality of Barker code lock. Called 'Signal Quality' in datasheets. N)r  r  )r
  qualityrm   rm   rn   set_lock_quality  r  zRadioTap.set_lock_qualityc                 C   r  )zLGet the quality of Barker code lock. Called 'Signal Quality' in datasheets. Nr   )r  r  r  rm   rm   rn   get_lock_quality%  r  zRadioTap.get_lock_qualityc                 C   r  )pSet the transmit power expressed as unitless distance from max power set at factory calibration. 0 is max power.N)r  r  r
  powerrm   rm   rn   set_tx_attenuation.  r  zRadioTap.set_tx_attenuationc                 C   r  )r  Nr   )r  r  r  rm   rm   rn   get_tx_attenuation4  r  zRadioTap.get_tx_attenuationc                 C   r  )pSet the transmit power expressed as decibel distance from max power set at factory calibration. 0 is max power. N)r  r  r  rm   rm   rn   set_dB_tx_attenuation=  r  zRadioTap.set_dB_tx_attenuationc                 C   r  )r  Nr   )r  r  r  rm   rm   rn   get_dB_tx_attenuationC  r  zRadioTap.get_dB_tx_attenuationc                 C   r  )zSet the transmit power expressed as dBm (decibels from a 1 milliwatt reference). This is the absolute power level measured at the antenna port.N)r  r  r  rm   rm   rn   set_dBm_tx_powerL  s   zRadioTap.set_dBm_tx_powerc                 C   r  )zGet the transmit power expressed as dBm (decibels from a 1 milliwatt reference). This is the absolute power level measured at the antenna port.Nr   )r  r  r  rm   rm   rn   get_dBm_tx_powerS  r  zRadioTap.get_dBm_tx_powerc                 C   r  )ISet Rx/Tx antenna index for this packet. The first antenna is antenna 0. N)r  r  )r
  antenna_indexrm   rm   rn   set_antenna]  r  zRadioTap.set_antennac                 C   r  )r  Nr   )r  r  r  rm   rm   rn   get_antennac  r  zRadioTap.get_antennac                 C   r  r  )r  r  r  rm   rm   rn   set_dB_ant_signall  r  zRadioTap.set_dB_ant_signalc                 C   r  r  )r  r  r  rm   rm   rn   get_dB_ant_signalr  r  zRadioTap.get_dB_ant_signalc                 C   r  r  )r  r  r  rm   rm   rn   set_dB_ant_noise{  r  zRadioTap.set_dB_ant_noisec                 C   r  r  )r  r  r  rm   rm   rn   get_dB_ant_noise  r  zRadioTap.get_dB_ant_noisec                 C   r  )zySet the Field containing the FCS of the frame (instead of it being appended to the frame as it would appear on the air.) N)r  r  )r
  fcsrm   rm   rn   set_FCS_in_header  r  zRadioTap.set_FCS_in_headerc                 C   r  )zyGet the Field containing the FCS of the frame (instead of it being appended to the frame as it would appear on the air.) Nr   )r  r  r  rm   rm   rn   get_FCS_in_header  r  zRadioTap.get_FCS_in_headerc                 C   r  )z7Set the number of RTS retries a transmitted frame used.N)r  r  r
  retriesrm   rm   rn   set_RTS_retries  r  zRadioTap.set_RTS_retriesc                 C   r  )z7Get the number of RTS retries a transmitted frame used.Nr   )r  r  r  rm   rm   rn   get_RTS_retries  r  zRadioTap.get_RTS_retriesc                 C   r  )z)Set the properties of transmitted frames.N)r  r  )r
  r  rm   rm   rn   set_tx_flags  r  zRadioTap.set_tx_flagsc                 C   r  )z)Get the properties of transmitted frames.Nr   )r  r  r  rm   rm   rn   get_tx_flags  r  zRadioTap.get_tx_flagsc                 C   s   |  | j||||g dS )zCSet extended channel information: flags, freq, channel and maxpowerN)r  r  )r
  r  r  channelmaxpowerrm   rm   rn   set_xchannel  s   zRadioTap.set_xchannelc                 C   s   | j | jd}|S )zCGet extended channel information: flags, freq, channel and maxpower)r  )r  r  r  rm   rm   rn   get_xchannel  s   zRadioTap.get_xchannelc                 C   r  )z8Set the number of data retries a transmitted frame used.N)r  r  r  rm   rm   rn   set_data_retries  r  zRadioTap.set_data_retriesc                 C   r  )z8Get the number of data retries a transmitted frame used.Nr   )r  r  r  rm   rm   rn   get_data_retries  r  zRadioTap.get_data_retriesc                 C   r  )z,Set the hardware queue to send the frame on.N)r  RTF_HARDWARE_QUEUE)r
  queuerm   rm   rn   set_hardware_queue  r  zRadioTap.set_hardware_queuec                 C   s   | j d|  d dS )z:Update the RadioTap header length field with the real sizer   ro  N)r  rw  get_header_sizer~  rm   rm   rn   __update_header_length  s   zRadioTap.__update_header_lengthc                 C   s   |    t| S rf  )r  r   
get_packetr~  rm   rm   rn   r$    s   
zRadioTap.get_packetrf  )r	   )VrY   rZ   r[   r  r  r  object_RadioTap__RadioTapFieldrv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __subclasses__r  sortr  r  rG  rH  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r  r$  rm   rm   rm   rn   rk    s    



					
		rk  c                   @   r  )&Dot11ManagementFramez802.11 Management FrameNc                 C   ri  r  rk  rl  rm   rm   rn   r    rm  zDot11ManagementFrame.__init__c                 C   rn  )z/Return 802.11 Management frame 'Duration' fieldr   ro  rp  r  rm   rm   rn   rr    rs  z!Dot11ManagementFrame.get_durationc                 C   rt  )z0Set the 802.11 Management frame 'Duration' fieldru  r   ro  Nrv  rx  rm   rm   rn   ry  
  rz  z!Dot11ManagementFrame.set_durationc                 C   r{  )zMReturn 802.11 Management frame 'Destination Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   get_destination_address  r  z,Dot11ManagementFrame.get_destination_addressc                 C   r  )zJSet 802.11 Management frame 'Destination Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   set_destination_address  r  z,Dot11ManagementFrame.set_destination_addressc                 C   r{  )zHReturn 802.11 Management frame 'Source Address' field as a 6 bytes arrayr   r   r|  r~  rm   rm   rn   get_source_address  r  z'Dot11ManagementFrame.get_source_addressc                 C   r  )zESet 802.11 Management frame 'Source Address' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   set_source_address  r  z'Dot11ManagementFrame.set_source_addressc                 C   r{  )z?Return 802.11 Management frame 'BSSID' field as a 6 bytes arrayr   r  r|  r~  rm   rm   rn   r  "  r  zDot11ManagementFrame.get_bssidc                 C   r  )z<Set 802.11 Management frame 'BSSID' field as a 6 bytes arrayr   r   r   Nr  r  rm   rm   rn   r  &  r  zDot11ManagementFrame.set_bssidc                 C   rn  )z7Return 802.11 Management frame 'Sequence Control' fieldr  ro  rp  r  rm   rm   rn   r  +  rs  z)Dot11ManagementFrame.get_sequence_controlc                 C   rt  )z8Set the 802.11 Management frame 'Sequence Control' fieldru  r  ro  Nrv  rx  rm   rm   rn   r  0  rz  z)Dot11ManagementFrame.set_sequence_controlc                 C   s   |   }|d@ S )z9Return 802.11 Management frame 'Fragment Number' subfieldr:  r  r  rm   rm   rn   r  6  s   z(Dot11ManagementFrame.get_fragment_numberc                 C   r  )z:Set the 802.11 Management frame 'Fragment Number' subfieldr  r  ro  r:  Nr  r  rm   rm   rn   r  <  r  z(Dot11ManagementFrame.set_fragment_numberc                 C   s   |   }|d? d@ S )z9Return 802.11 Management frame 'Sequence Number' subfieldr	   r  r.  r  rm   rm   rn   r  E  s   z(Dot11ManagementFrame.get_sequence_numberc                 C   r  )z:Set the 802.11 Management frame 'Sequence Number' subfieldr:  r  ro  r  r	   Nr  r  rm   rm   rn   r  K  r  z(Dot11ManagementFrame.set_sequence_numberc                 C   r  )z1Return 802.11 Management frame 'Frame Body' fieldr  r~  rm   rm   rn   r  T  r  z#Dot11ManagementFrame.get_frame_bodyc                 C   r  )z.Set 802.11 Management frame 'Frame Body' fieldNr  r  rm   rm   rn   r  Y  r  z#Dot11ManagementFrame.set_frame_bodyrf  )rY   rZ   r[   r  r  rr  ry  r*  r+  r,  r-  r  r  r  r  r  r  r  r  r  r  rm   rm   rm   rn   r)    r  r)  c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$S )%DOT11_MANAGEMENT_ELEMENTSr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r:  r[  rY  !   r   #   r   %   r   '   r   )   r   +   r   r   r   2   r     N)&rY   rZ   r[   SSIDSUPPORTED_RATESFH_PARAMETER_SETDS_PARAMETER_SETCF_PARAMETER_SETTIMIBSS_PARAMETER_SETCOUNTRYHOPPING_PARAMETERHOPPING_TABLEREQUESTBSS_LOADEDCA_PARAMETER_SETTSPECTCLASSCHEDULECHALLENGE_TEXTPOWER_CONSTRAINTPOWER_CAPABILITYTPC_REQUEST
TPC_REPORTSUPPORTED_CHANNELSCHANNEL_SWITCH_ANNMEASURE_REQMEASURE_REPQUIETIBSS_DFSERP_INFOTS_DELAYTCLAS_PROCESSINGQOS_CAPABILITYRSNEXT_SUPPORTED_RATESEXTENDED_CAPABILITIESVENDOR_SPECIFICrm   rm   rm   rn   r/  ^  sH    r/  c                   @   sJ   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdddZdddZ	dS )Dot11ManagementHelperNc                 C   sT   || _ |r!| || j d  }||7 }t| || | | d S t| || d S rf  )(_Dot11ManagementHelper__HEADER_BASE_SIZE1_Dot11ManagementHelper__calculate_elements_lengthr   r  r	  )r
  r  r  r  elements_lengthrm   rm   rn   r    s   zDot11ManagementHelper.__init__c                 c   s    t |}d}|dkr@td|||d  \}}|d u rn||kr*d||d fV  |d7 }||7 }||kr8|}||8 }|dksd|d fV  d S )Nr   z!BBr   )r$  rM  rO  )r
  elements
element_id	remainingr  idr  rm   rm   rn   _find_element  s    z#Dot11ManagementHelper._find_elementc                 C   s2   |  |d }t|\}}}|dkrtd| |S )Nr_  zInternal Error %s)rd  nextr  )r
  r`  gen_tpmatchr  r  rm   rm   rn   __calculate_elements_length  s
   z1Dot11ManagementHelper.__calculate_elements_lengthc           
      c   s`    |   | jd  }| ||}	 t|\}}}|dkrd S |d }|| }||| }	|	V  q)NTr   r   )r  r\  rd  re  )
r
  ra  r`  rf  rg  r  r  value_offset	value_endr  rm   rm   rn   _get_elements_generator  s   z-Dot11ManagementHelper._get_elements_generatorc                 C   s>   |  |}zt|}|d u rtd|W S  ty   Y d S w )Nz1gen_get_element salio con None in _get_element!!!)rk  re  r  StopIteration)r
  ra  gen_get_elementsrm   rm   rn   _get_element  s   
z"Dot11ManagementHelper._get_elementFc                 C   s   |   }|| jd  }| ||}d}	 t|\}}}	|dkr n| j| }
|d |
 ||
|	 d   }d}|du r:nq|s?dS | | dS )NFTr   )r  r\  rd  re  r  )r
  ra  multipler  r`  rf  foundrg  r  r  startrm   rm   rn   delete_element  s$   


z$Dot11ManagementHelper.delete_elementTc                 C   s   t dt| |t||}|  }|| jd  }| ||}d}	 t|\}	}
}| j|
 }|	dkrG|rG|d | | ||| d   }d}n|	dkr\|d | | ||d   }d}n	 |sc|| }| | d S )NzBB%dsFTr   )rM  rN  r$  r  r\  rd  re  r  )r
  ra  r  replace	parameterr  r`  rf  rq  rg  r  r  rr  rm   rm   rn   _set_element  s(   
 z"Dot11ManagementHelper._set_elementrf  F)T)
rY   rZ   r[   r  rd  r]  rk  ro  rs  rv  rm   rm   rm   rn   r[    s    

r[  c                   @   s   e Zd ZdZdZd/ddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zd0ddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. ZdS )1Dot11ManagementBeaconz802.11 Management Beacon Framer   Nc                 C      | j }d}t| ||| d S Nr   )(_Dot11ManagementBeacon__HEADER_BASE_SIZEr[  r  rl  rm   rm   rn   r  	     zDot11ManagementBeacon.__init__c                 C   rn  )z;Return the 802.11 Management Beacon frame 'Timestamp' fieldr   ro  )r  get_long_longr  rm   rm   rn   get_timestamp	  rs  z#Dot11ManagementBeacon.get_timestampc                 C   rt  )z8Set the 802.11 Management Beacon frame 'Timestamp' fieldl    r   ro  N)r  set_long_longrx  rm   rm   rn   set_timestamp	  rz  z#Dot11ManagementBeacon.set_timestampc                 C   rn  )zReturn the 802.11 Management Beacon frame 'Beacon Interval' fieldTo convert it to seconds =>  secs = Beacon_Interval*1024/1000000r   ro  rp  r  rm   rm   rn   get_beacon_interval	  r  z)Dot11ManagementBeacon.get_beacon_intervalc                 C   rt  )z>Set the 802.11 Management Beacon frame 'Beacon Interval' fieldru  r   ro  Nrv  rx  rm   rm   rn   set_beacon_interval	  rz  z)Dot11ManagementBeacon.set_beacon_intervalc                 C   rn  )zJReturn the 802.11 Management Beacon frame 'Capability information' field. r   ro  rp  r  rm   rm   rn   get_capabilities	  r3  z&Dot11ManagementBeacon.get_capabilitiesc                 C   rt  )zESet the 802.11 Management Beacon frame 'Capability Information' fieldru  r   ro  Nrv  rx  rm   rm   rn   set_capabilities%	  rz  z&Dot11ManagementBeacon.set_capabilitiesc                 C      |  tjS zbGet the 802.11 Management SSID element. The SSID element indicates the identity of an ESS or IBSS.ro  r/  r8  r~  rm   rm   rn   get_ssid+	     zDot11ManagementBeacon.get_ssidc                 C      |  tj| d S rf  rv  r/  r8  r
  ssidrm   rm   rn   set_ssid0	     zDot11ManagementBeacon.set_ssidFc                 C   J   |  tj}|du rdS tdt| |}|s|S tdd |D }|S )Get the 802.11 Management Supported Rates element. Specifies up to eight rates, then an Extended Supported Rate element shall be generated to specify the remaining supported rates.If human_readable is True, the rates are returned in Mbit/secN%dBc                 S      g | ]}|d @ d qS r  g      ?rm   r  r  rm   rm   rn   
<listcomp>@	      z=Dot11ManagementBeacon.get_supported_rates.<locals>.<listcomp>ro  r/  r9  rM  rO  r$  tupler
  human_readablern  rates	rates_Mbsrm   rm   rn   get_supported_rates3	     z)Dot11ManagementBeacon.get_supported_ratesc                 C   @   t |}|dkrtdtjd| g|R  }| tj| dS zSet the 802.11 Management Supported Rates element. Specifies a tuple or list with up to eight rates, then an Extended Supported Rate element shall be generated to specify the remaining supported rates.r   zrequires up to eight ratesBNr$  r  rM  rN  rv  r/  r9  r
  r  	qty_ratesrates_stringrm   rm   rn   set_supported_ratesC	  
   z)Dot11ManagementBeacon.set_supported_ratesc                 C   *   |  tj}|du rdS td|\}|S )zGet the 802.11 Management DS Parameter set element. Contains information to allow channel number identification for STAs using a DSSS PHY.Nr  )ro  r/  r;  rM  rO  )r
  rn  chrm   rm   rn   get_ds_parameter_setN	  s
   z*Dot11ManagementBeacon.get_ds_parameter_setc                 C      t d|}| tj| dS )zSet the 802.11 Management DS Parameter set element. Contains information to allow channel number identification for STAs using a DSSS PHY.r  N)rM  rN  rv  r/  r;  )r
  r  channel_stringrm   rm   rn   set_ds_parameter_setZ	  s   z*Dot11ManagementBeacon.set_ds_parameter_setc                 C      |  tj}|du rdS |S z:Get the 802.11 Management Robust Security Network element.Nro  r/  rW  r
  rn  rm   rm   rn   get_rsna	     zDot11ManagementBeacon.get_rsnc                 C      |  tj| dS z:Set the 802.11 Management Robust Security Network element.Nrv  r/  rW  r  rm   rm   rn   set_rsnh	  r  zDot11ManagementBeacon.set_rsnc                 C   r  )zFGet the 802.11 Management ERP (extended rate PHY) Information element.Nr  )ro  r/  rS  rM  rO  )r
  rn  erprm   rm   rn   get_erpl	  s
   zDot11ManagementBeacon.get_erpc                 C   r  )zGSet the 802.11 Management ERP (extended rate PHY) Inforamation element.r  N)rM  rN  rv  r/  rS  )r
  r  
erp_stringrm   rm   rn   set_erpv	  s   zDot11ManagementBeacon.set_erpc                 C   sB   |  tj}|du rdS td|\}}}}|d}||||fS )zGet the 802.11 Management Country element.Returns a tuple containing Country code, first channel number, number of channels and maximum transmit power levelN3sBBB )ro  r/  r?  rM  rO  strip)r
  rn  codefirstnummaxrm   rm   rn   get_country|	  s   
z!Dot11ManagementBeacon.get_countryc                 C   sL   t |dkr
td|ddt |  7 }td||||}| tj| dS )z*Set the 802.11 Management Country element.r   z'Country code must be up to 3 bytes longr  r  N)r$  r  rM  rN  rv  r/  r?  )r
  r  first_channelnumber_of_channels	max_powercountry_stringrm   rm   rn   set_country	  s   
z!Dot11ManagementBeacon.set_countryc                 C   j   	 g }|  tj}z!	 t|}|du rtd|dd }|dd }|||f q ty4   Y |S w zGGet the 802.11 Management Vendor Specific elements as a list of tuples.r   Nz!gen_get_element salio con None!!!r   rk  r/  rZ  re  r  appendrl  r
  vsrm  rn  r  r  rm   rm   rn   get_vendor_specific	      
z)Dot11ManagementBeacon.get_vendor_specificc                 C   N   d}t |}||krtd| t |dkrtd| jtj|| dd dS zSet the 802.11 Management Vendor Specific element. The Vendor Specific information element is used to carry information not defined in the standard within a single defined formatrD  zdata allow up to %d bytes longr   zoui is three bytes longF)rt  Nr$  r  rv  r/  rZ  r
  r  r  max_data_lendata_lenrm   rm   rn   add_vendor_specific	     z)Dot11ManagementBeacon.add_vendor_specificrf  rw  )rY   rZ   r[   r  r{  r  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rm   rm   rm   rn   rx    s0    


rx  c                   @   s<   e Zd ZdZdddZdd Zdd Zdd
dZdd ZdS )Dot11ManagementProbeRequestz%802.11 Management Probe Request FrameNc                 C   s   d}d}t | ||| d S rz  )r[  r  rl  rm   rm   rn   r  	  s   z$Dot11ManagementProbeRequest.__init__c                 C   r  r  r  r~  rm   rm   rn   r  	  r  z$Dot11ManagementProbeRequest.get_ssidc                 C   r  rf  r  r  rm   rm   rn   r  	  r  z$Dot11ManagementProbeRequest.set_ssidFc                 C   r  )r  Nr  c                 S   r  r  rm   r  rm   rm   rn   r  	  r  zCDot11ManagementProbeRequest.get_supported_rates.<locals>.<listcomp>r  r  rm   rm   rn   r  	  r  z/Dot11ManagementProbeRequest.get_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r  	  r  z/Dot11ManagementProbeRequest.set_supported_ratesrf  rw  )	rY   rZ   r[   r  r  r  r  r  r  rm   rm   rm   rn   r  	  s    

r  c                   @      e Zd ZdZdddZdS )Dot11ManagementProbeResponsez&802.11 Management Probe Response FrameNc                 C      t | | d S rf  )rx  r  r
  r  rm   rm   rn   r  	     z%Dot11ManagementProbeResponse.__init__rf  rY   rZ   r[   r  r  rm   rm   rm   rn   r  	      r  c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!S )"DOT11_REASON_CODESr   r   r   r	   r
   r   r   r   r   r   r   r   r   r:  r[  r  r     r     r     r  rY  r0  r   r1  r   r2  r   r3  -   N)#rY   rZ   r[   UNSPECIFIED_REASONPREV_AUTH_NO_LONGER_VALIDDEAUTH_STA_IS_LEAVINGDISASS_DUE_TO_INACTIVITYDISASS_AP_UNABLE_HANDLE_ALL_STA"C2_FRAME_FROM_NONAUTHENTICATED_STAC3_FRAME_FROM_NONASSOCIATED_STADISSASS_STA_IS_LEAVINGSTA_REQ_NOT_AUTH_STA!DISASS_POWER_CAP_IE_UNNACCEPTABLEDISASS_SUP_CH_IE_UNNACCEPTABLE
INVALID_IEMIC_FAILUREFOUR_WAY_HANDSHAKE_TIMEOUTGROUP_KEY_HANDSHAKE_TIMEOUTIE_FOUR_WAY_HANDSHAKE_DIFFERENTINVALID_GROUP_CIPHERINVALID_PAIRWISE_CIPHERINVALID_AKMPUNSUPPORTED_RSN_IE_VERSIONINVALID_RSN_IE_CAPX_AUTH_FAILED%CIPHER_SUITE_REJECTED_SECURITY_POLICYDISASS_QOS_RELATED_REASON!DISASS_QOS_UNSUFFICIENT_BANDWIDTH#DISASS_EXCESSIVE_FRAMES_WITHOUT_ACKDISASS_STA_TX_OUTSIDE_TXOPSREQ_STA_LEAVINGREQ_STA_NOT_WANT_MECHANISM#REQ_STA_RECV_FRAMES_WHICH_SETUP_REQREQ_STA_DUE_TIMEOUTSTA_NOT_SUPPORT_CIPHER_SUITErm   rm   rm   rn   r  	  sB    r  c                   @   r  )
Dot11ManagementDeauthenticationz(802.11 Management Deauthentication FrameNc                 C   s:   d}d}|rt | || | | d S t | || d S )Nr   r   rk  rl  rm   rm   rn   r  
  s   z(Dot11ManagementDeauthentication.__init__c                 C   r  )zBGet the 802.11 Management Deauthentication or Disassociation Code.r   ro  rp  r~  rm   rm   rn   get_reason_code!
  r  z/Dot11ManagementDeauthentication.get_reason_codec                 C   s   | j d|d d S )Nr   ro  rv  )r
  rcrm   rm   rn   set_reason_code%
  s   z/Dot11ManagementDeauthentication.set_reason_coderf  )rY   rZ   r[   r  r  r  r
  rm   rm   rm   rn   r  
  s
    
	r  c                   @   r  )DOT11_AUTH_ALGORITHMSr   r   N)rY   rZ   r[   OPEN
SHARED_KEYrm   rm   rm   rn   r  (
  r  r  c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'S )(DOT11_AUTH_STATUS_CODESr   r   r   r   r   r   r   r:  r[  r  r  r  r  r  r  r  r        rY  r0  r   r1  r2  r   r3  r   r4  r   r5  r   r  r   /   r   1   r6  3   N))rY   rZ   r[   
SUCCESSFULUNSPECIFIED_FAILURECAP_REQ_UNSUPPORTED&REASS_DENIED_CANNOT_CONFIRM_ASS_EXISTS(ASS_DENIED_REASON_OUTSIDE_SCOPE_STANDARDSTA_NOT_SUPPORT_AUTH_ALGORITHMAUTH_SEQ_OUT_OF_EXPECTEDAUTH_REJECTED_CHALLENGE_FAILUREAUTH_REJECTED_TIMEOUT$ASS_DENIED_AP_UNABLE_HANDLE_MORE_STA(ASS_DENIED_STA_NOT_SUPPORTING_DATA_RATES,ASS_DENIED_STA_NOT_SUPPORTING_SHORT_PREAMBLE-ASS_DENIED_STA_NOT_SUPPORTING_PBCC_MODULATION-ASS_DENIED_STA_NOT_SUPPORTING_CHANNEL_AGILITY%ASS_REQUEST_REJECTED_SPACTRUM_MGT_CAP/ASS_REQUEST_REJECTED_POWER_CAP_IE_UNNACCEPTABLE,ASS_REQUEST_REJECTED_SUP_CH_IE_UNNACCEPTABLE-ASS_DENIED_STA_NOT_SUPPORTING_SHORT_SLOT_TIME'ASS_DENIED_STA_NOT_SUPPORTING_DSSS_OFDMUNSPECIFIED_QOS%ASS_DENIED_QOS_UNSUFFICIENT_BANDWIDTHASS_DENIED_EXCESSIVE_FRAME_LOSTASS_DENIED_STA_NOT_SUPPORT_QOSREQ_HAS_BEEN_DECLINED&REQ_NOT_SUCCESSFUL_PARAM_INVALID_VALUErE  r  r  r  r  r  r  r  TS_NOT_CREATED"DIRECT_LINK_NOT_ALLOWED_BSS_POLICYDST_STA_NOT_PRESENT_IN_BSSDST_STA_NOT_QOS_STA$ASS_DENIED_LISTEN_INTERVAL_TOO_LARGErm   rm   rm   rn   r  ,
  sN    r  c                   @   sn   e Zd ZdZdZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )Dot11ManagementAuthenticationz&802.11 Management Authentication Framer   Nc                 C   ry  rz  )0_Dot11ManagementAuthentication__HEADER_BASE_SIZEr[  r  rl  rm   rm   rn   r  ]
  r|  z&Dot11ManagementAuthentication.__init__c                 C   r  )z3Get the 802.11 Management Authentication Algorithm.r   ro  rp  r~  rm   rm   rn   get_authentication_algorithmb
  r  z:Dot11ManagementAuthentication.get_authentication_algorithmc                 C   r  )z3Set the 802.11 Management Authentication Algorithm.r   ro  Nrv  )r
  	algorithmrm   rm   rn   set_authentication_algorithmf
  r  z:Dot11ManagementAuthentication.set_authentication_algorithmc                 C   r  )z2Get the 802.11 Management Authentication Sequence.r   ro  rp  r~  rm   rm   rn   get_authentication_sequencej
  r  z9Dot11ManagementAuthentication.get_authentication_sequencec                 C   r  )z2Set the 802.11 Management Authentication Sequence.r   ro  Nrv  )r
  seqrm   rm   rn   set_authentication_sequencen
  r  z9Dot11ManagementAuthentication.set_authentication_sequencec                 C   r  )z0Get the 802.11 Management Authentication Status.r	   ro  rp  r~  rm   rm   rn   get_authentication_statusr
  r  z7Dot11ManagementAuthentication.get_authentication_statusc                 C   r  )z0Set the 802.11 Management Authentication Status.r	   ro  Nrv  )r
  statusrm   rm   rn   set_authentication_statusv
  r  z7Dot11ManagementAuthentication.set_authentication_statusc                 C   r  rf  )ro  r/  rH  r~  rm   rm   rn   get_challenge_textz
  ro  z0Dot11ManagementAuthentication.get_challenge_textc                 C   r  rf  )rv  r/  rH  )r
  	challengerm   rm   rn   set_challenge_text}
  r  z0Dot11ManagementAuthentication.set_challenge_textc                 C   r  r  r  r  rm   rm   rn   r  
  r  z1Dot11ManagementAuthentication.get_vendor_specificc                 C   r  r  r  r  rm   rm   rn   r  
  r  z1Dot11ManagementAuthentication.add_vendor_specificrf  )rY   rZ   r[   r  r3  r  r4  r6  r7  r9  r:  r<  r=  r?  r  r  rm   rm   rm   rn   r2  X
  s    
r2  c                   @   r  )Dot11ManagementDisassociationz&802.11 Management Disassociation FrameNc                 C   r  rf  )r  r  r  rm   rm   rn   r  
  r  z&Dot11ManagementDisassociation.__init__rf  r  rm   rm   rm   rn   r@  
  r  r@  c                   @   s   e Zd ZdZdZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zd ddZdd Zdd Zdd Zdd Zdd ZdS )!!Dot11ManagementAssociationRequestz+802.11 Management Association Request Framer	   Nc                 C   ry  rz  )4_Dot11ManagementAssociationRequest__HEADER_BASE_SIZEr[  r  rl  rm   rm   rn   r  
  r|  z*Dot11ManagementAssociationRequest.__init__c                 C   rn  )zWReturn the 802.11 Management Association Request Frame 'Capability information' field. r   ro  rp  r  rm   rm   rn   r  
  rs  z2Dot11ManagementAssociationRequest.get_capabilitiesc                 C   rt  )zRSet the 802.11 Management Association Request Frame 'Capability Information' fieldru  r   ro  Nrv  rx  rm   rm   rn   r  
  rz  z2Dot11ManagementAssociationRequest.set_capabilitiesc                 C   rn  )zPReturn the 802.11 Management Association Request Frame 'Listen Interval' field. r   ro  rp  r  rm   rm   rn   get_listen_interval
  rs  z5Dot11ManagementAssociationRequest.get_listen_intervalc                 C   r  )zKSet the 802.11 Management Association Request Frame 'Listen Interval' fieldr   ro  Nrv  r  rm   rm   rn   set_listen_interval
  r  z5Dot11ManagementAssociationRequest.set_listen_intervalc                 C   r  r  r  r~  rm   rm   rn   r  
  r  z*Dot11ManagementAssociationRequest.get_ssidc                 C   r  rf  r  r  rm   rm   rn   r  
  r  z*Dot11ManagementAssociationRequest.set_ssidFc                 C   r  )r  Nr  c                 S   r  r  rm   r  rm   rm   rn   r  
  r  zIDot11ManagementAssociationRequest.get_supported_rates.<locals>.<listcomp>r  r  rm   rm   rn   r  
  r  z5Dot11ManagementAssociationRequest.get_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r  
  r  z5Dot11ManagementAssociationRequest.set_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r  
  r  z)Dot11ManagementAssociationRequest.get_rsnc                 C   r  r  r  r  rm   rm   rn   r  
  r  z)Dot11ManagementAssociationRequest.set_rsnc                 C   r  r  r  r  rm   rm   rn   r  
  r  z5Dot11ManagementAssociationRequest.get_vendor_specificc                 C   r  r  r  r  rm   rm   rn   r    r  z5Dot11ManagementAssociationRequest.add_vendor_specificrf  rw  )rY   rZ   r[   r  rB  r  r  r  rC  rD  r  r  r  r  r  r  r  r  rm   rm   rm   rn   rA  
  s     

rA  c                   @   sp   e Zd ZdZdZdddZdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdddZdd Zdd Zdd ZdS )"Dot11ManagementAssociationResponsez,802.11 Management Association Response Framer   Nc                 C   ry  rz  )5_Dot11ManagementAssociationResponse__HEADER_BASE_SIZEr[  r  rl  rm   rm   rn   r  +  r|  z+Dot11ManagementAssociationResponse.__init__c                 C   rn  )zXReturn the 802.11 Management Association Response Frame 'Capability information' field. r   ro  rp  r  rm   rm   rn   r  0  rs  z3Dot11ManagementAssociationResponse.get_capabilitiesc                 C   rt  )zSSet the 802.11 Management Association Response Frame 'Capability Information' fieldru  r   ro  Nrv  rx  rm   rm   rn   r  5  rz  z3Dot11ManagementAssociationResponse.set_capabilitiesc                 C   rn  )zMReturn the 802.11 Management Association Response Frame 'Status Code' field. r   ro  rp  r  rm   rm   rn   get_status_code;  rs  z2Dot11ManagementAssociationResponse.get_status_codec                 C   r  )zHSet the 802.11 Management Association Response Frame 'Status Code' fieldr   ro  Nrv  r  rm   rm   rn   set_status_code@  r  z2Dot11ManagementAssociationResponse.set_status_codec                 C   rn  )zPReturn the 802.11 Management Association Response Frame 'Association Id' field. r	   ro  rp  r  rm   rm   rn   get_association_idD  rs  z5Dot11ManagementAssociationResponse.get_association_idc                 C   r  )zKSet the 802.11 Management Association Response Frame 'Association Id' fieldr	   ro  Nrv  r  rm   rm   rn   set_association_idI  r  z5Dot11ManagementAssociationResponse.set_association_idFc                 C   r  )r  Nr  c                 S   r  r  rm   r  rm   rm   rn   r  Z  r  zJDot11ManagementAssociationResponse.get_supported_rates.<locals>.<listcomp>r  r  rm   rm   rn   r  M  r  z6Dot11ManagementAssociationResponse.get_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r  ]  r  z6Dot11ManagementAssociationResponse.set_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r  h  r  z6Dot11ManagementAssociationResponse.get_vendor_specificc                 C   r  r  r  r  rm   rm   rn   r    s   z6Dot11ManagementAssociationResponse.add_vendor_specificrf  rw  )rY   rZ   r[   r  rF  r  r  r  rG  rH  rI  rJ  r  r  r  r  rm   rm   rm   rn   rE  &  s    

rE  c                   @   s   e Zd ZdZdZd#ddZdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zd$ddZdd Zdd Zdd Zdd  Zd!d" ZdS )%#Dot11ManagementReassociationRequestz-802.11 Management Reassociation Request Framer   Nc                 C   ry  rz  )6_Dot11ManagementReassociationRequest__HEADER_BASE_SIZEr[  r  rl  rm   rm   rn   r    r|  z,Dot11ManagementReassociationRequest.__init__c                 C   rn  )zYReturn the 802.11 Management Reassociation Request Frame 'Capability information' field. r   ro  rp  r  rm   rm   rn   r    rs  z4Dot11ManagementReassociationRequest.get_capabilitiesc                 C   rt  )zTSet the 802.11 Management Reassociation Request Frame 'Capability Information' fieldru  r   ro  Nrv  rx  rm   rm   rn   r    rz  z4Dot11ManagementReassociationRequest.set_capabilitiesc                 C   rn  )zRReturn the 802.11 Management Reassociation Request Frame 'Listen Interval' field. r   ro  rp  r  rm   rm   rn   rC    rs  z7Dot11ManagementReassociationRequest.get_listen_intervalc                 C   r  )zMSet the 802.11 Management Reassociation Request Frame 'Listen Interval' fieldr   ro  Nrv  r  rm   rm   rn   rD    r  z7Dot11ManagementReassociationRequest.set_listen_intervalc                 C   r{  )zLReturn the 802.11 Management Reassociation Request Frame 'Current AP' field.r	   r   r|  r~  rm   rm   rn   get_current_ap  r  z2Dot11ManagementReassociationRequest.get_current_apc                 C   r  )zHSet the 802.11 Management Reassociation Request Frame 'Current AP' fieldr   r   r	   Nr  r  rm   rm   rn   set_current_ap  r  z2Dot11ManagementReassociationRequest.set_current_apc                 C   r  r  r  r~  rm   rm   rn   r    r  z,Dot11ManagementReassociationRequest.get_ssidc                 C   r  rf  r  r  rm   rm   rn   r    r  z,Dot11ManagementReassociationRequest.set_ssidFc                 C   r  )r  Nr  c                 S   r  r  rm   r  rm   rm   rn   r    r  zKDot11ManagementReassociationRequest.get_supported_rates.<locals>.<listcomp>r  r  rm   rm   rn   r    r  z7Dot11ManagementReassociationRequest.get_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r    r  z7Dot11ManagementReassociationRequest.set_supported_ratesc                 C   r  r  r  r  rm   rm   rn   r    r  z+Dot11ManagementReassociationRequest.get_rsnc                 C   r  r  r  r  rm   rm   rn   r    r  z+Dot11ManagementReassociationRequest.set_rsnc                 C   r  r  r  r  rm   rm   rn   r    r  z7Dot11ManagementReassociationRequest.get_vendor_specificc                 C   r  r  r  r  rm   rm   rn   r    r  z7Dot11ManagementReassociationRequest.add_vendor_specificrf  rw  )rY   rZ   r[   r  rL  r  r  r  rC  rD  rM  rN  r  r  r  r  r  r  r  r  rm   rm   rm   rn   rK    s$    

rK  c                   @   r  )$Dot11ManagementReassociationResponsez.802.11 Management Reassociation Response FrameNc                 C   r  rf  )rE  r  r  rm   rm   rn   r    r  z-Dot11ManagementReassociationResponse.__init__rf  r  rm   rm   rm   rn   rO    r  rO  )0rM  binasciir   impacket.ImpactPacketr   r   impacket.Dot11Cryptor   	frequencyrH   ro   r  rh  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r9  rQ  r\  rj  rk  r)  r/  r[  rx  r  r  r  r  r  r  r2  r@  rA  rE  rK  rO  rm   rm   rm   rn   <module>   s<  3 N o(,((d$%#K, )v    Nd,s B+&,Rvk