U v`v@s2dZddlmZddlmZddlZddlmZddlmZdZ dZ dZ dZ dZ dZd Zd Zd Zd Zd ZdZdZdZdZd Zd ZdZdZdZdZdZdZdZ dZ!dZ"d Z#d Z$d Z%dZ&dZ'd Z(d Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5d Z6d Z7dZ8dZ9dZ:dZ;d ZdZ?dZ@dZAd ZBd ZCd ZDdZEdZFdZGdZHdZId ZJd ZKd ZLdZMdZNdZOdZPd ZQee e egZRdZSdZTdZUdZVdZWdZXd ZYdZZd Z[dZ\d Z]dZ^dZ_dZ`Gd d!d!ejaZbd"d#Zcd$d%Zdd&d'Zed(d)Zfd*d+Zgd,d-Zhd.d/Zid0d1Zjd2d3Zkd4d5Zld6d7Zmd8d9Znd:d;Zodd?ZqdS)@z IEEE 802.11.)print_function)absolute_importN)dpkt)ntole ii i @-2=csleZdZdZdZeddZejddZeddZejddZed d Z e jd d Z ed d Z e jdd Z eddZ e jddZ eddZ e jddZ eddZ e jddZ eddZejddZeddZejddZeddZejd dZed!d"Zejd#d"Zd$d%ZGd&d'd'eZfd(d)Zd*d+ZGd,d-d-ejZGd.d/d/ejZGd0d1d1ejZGd2d3d3ejZGd4d5d5ejZGd6d7d7ejZGd8d9d9ejZGd:d;d;ejZ Gdd?d?ejZ"Gd@dAdAejZ#GdBdCdCejZ$GdDdEdEejZ%GdFdGdGejZ&GdHdIdIejZ'GdJdKdKejZ(GdLdMdMejZ)GdNdOdOejZ*GdPdQdQejZ+GdRdSdSejZ,GdTdUdUejZ-GdVdWdWejZ.GdXdYdYejZ/GdZd[d[ejZ0Gd\d]d]ejZ1Gd^d_d_ejZ2Gd`dadaejZ3GdbdcdcejZ4GdddedeejZ5Z6S)f IEEE80211zIEEE 802.11. TODO: Longer class information.... Attributes: __hdr__: Header fields of IEEE802.11. TODO. ))framectlHr)durationrrcCs|jt@t?SN)r _VERSION_MASK_VERSION_SHIFTselfr%f/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/ieee80211.pyversionszIEEE80211.versioncCs|t>|jt@B|_dSr )r"rr!r$valr%r%r&r'scCs|jt@t?Sr )r _TYPE_MASK _TYPE_SHIFTr#r%r%r&typeszIEEE80211.typecCs|t>|jt@B|_dSr )r+rr*r(r%r%r&r,scCs|jt@t?Sr )r _SUBTYPE_MASK_SUBTYPE_SHIFTr#r%r%r&subtypeszIEEE80211.subtypecCs|t>|jt@B|_dSr )r.rr-r(r%r%r&r/scCs|jt@t?Sr )r _TO_DS_MASK _TO_DS_SHIFTr#r%r%r&to_dsszIEEE80211.to_dscCs|t>|jt@B|_dSr )r1rr0r(r%r%r&r2scCs|jt@t?Sr )r _FROM_DS_MASK_FROM_DS_SHIFTr#r%r%r&from_dsszIEEE80211.from_dscCs|t>|jt@B|_dSr )r4rr3r(r%r%r&r5scCs|jt@t?Sr )r_MORE_FRAG_MASK_MORE_FRAG_SHIFTr#r%r%r& more_fragszIEEE80211.more_fragcCs|t>|jt@B|_dSr )r7rr6r(r%r%r&r8scCs|jt@t?Sr )r _RETRY_MASK _RETRY_SHIFTr#r%r%r&retryszIEEE80211.retrycCs|t>|jt@B|_dSr )r:rr9r(r%r%r&r;scCs|jt@t?Sr )r _PWR_MGT_MASK_PWR_MGT_SHIFTr#r%r%r&pwr_mgtszIEEE80211.pwr_mgtcCs|t>|jt@B|_dSr )r=rr<r(r%r%r&r>scCs|jt@t?Sr )r_MORE_DATA_MASK_MORE_DATA_SHIFTr#r%r%r& more_dataszIEEE80211.more_datacCs|t>|jt@B|_dSr )r@rr?r(r%r%r&rAscCs|jt@t?Sr )r _WEP_MASK _WEP_SHIFTr#r%r%r&wepsz IEEE80211.wepcCs|t>|jt@B|_dSr )rCrrBr(r%r%r&rDscCs|jt@t?Sr )r _ORDER_MASK _ORDER_SHIFTr#r%r%r&orderszIEEE80211.ordercCs|t>|jt@B|_dSr )rFrrEr(r%r%r&rGscCs$g|_td|jftd|jftd|jftd|jftd|j ft d|j ft d|j ftd|jftd |jftd |jfi }t|tkr td |dd d }z||d }||d }Wn&tk r|j}dt|}YnX||}|dd|j|_t||||j||d|jd}qndS)NssidratefhdscftimibssZht_capaZesrZht_infoBrrZie_r)iesIE_SSIDIEIE_RATESIE_FHFHIE_DSDSIE_CFCFIE_TIMTIMIE_IBSSIBSS IE_HT_CAPAIE_ESR IE_HT_INFOlen FCS_LENGTHstructunpackKeyErrorstrdatasetattrappend)r$bufZ ie_decoderZie_idparsernameZier%r%r& unpack_iessF   zIEEE80211.unpack_iesc@seZdZddZdS)zIEEE80211.CapabilitycCs|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@|_dS)Nrrrr r rrr r r rrrr)ZessrNZcf_pollZ cf_poll_reqprivacyZshort_preambleZpbccZhoppingZ spec_mgmtZqosZ short_slotZapsdZdsssZdelayed_blk_ackZ imm_blk_ack)r$fieldr%r%r&__init__s zIEEE80211.Capability.__init__N)__name__ __module__ __qualname__rpr%r%r%r& Capabilitysrtcs6|rd|kr|d|_nd|_tt|j||dS)NfcsF)pop fcs_presentsuperrrp)r$argskwargs __class__r%r&rps zIEEE80211.__init__c Cstj||||jd|_td|jftd|jft d|j ft d|j ft d|jftd|j ftd|jftd|jftd |jftd |jfi }td |jftd |jftd |jftd|jftd|j ft!d|j"fi}d|j#t$|j%t&|j't(|j)i}t*d|ft+d|ft,d|ft-d|fi}t.|t/|t0|i}|j1rRt2d|jdt3dd|_4|jddt3|_|j5t.kr|6|j|_7|j7j|_|j8t9kr|:|jdS|j8t;krdSz,||j5|j8d}||j5|j8d}Wn,td|j?}|j5t.kr6||j7j} n||j} | |_t@||| |j5t.kr|:| j|j8tAkr|BtC| jD|_D|j5t0kr|j8t,kr|E| j|_F|jFj| _| j|_dS)NbeaconZ assoc_reqZ assoc_respZdiassocZ reassoc_reqZ reassoc_respauthZ probe_respZdeauthactionZrtsZctsackbarbackZcf_endr data_frame|jt@B|_dSr )rrrr(r%r%r&rscCs|jt@t?Sr )r_ACK_POLICY_MASK_ACK_POLICY_SHIFTr#r%r%r& ack_policyszIEEE80211.BlockAck.ack_policycCs|t>|jt@B|_dSr )rrrr(r%r%r&rscCs|jt@t?Sr )r_MULTI_TID_MASK_MULTI_TID_SHIFTr#r%r%r& multi_tidszIEEE80211.BlockAck.multi_tidcCs|t>|jt@B|_dSr )rrrr(r%r%r&rscCs|jt@t?Sr )r _TID_MASK _TID_SHIFTr#r%r%r&tidszIEEE80211.BlockAck.tidcCs|t>|jt@B|_dSr )rrrr(r%r%r&rscCstj||||jd|_t|j|_|jrNtd|jdt d|_ ntd|jdt d|_ |jt |j t |j d|_dS)NZ8srZ128s)rrrdrrgrrrrc_COMPRESSED_BMP_LENGTHbmp _BMP_LENGTHrarr$rjr%r%r&rds zIEEE80211.BlockAck.unpackN) rqrrrsrpropertyrsetterrrrrdr%r%r%r&rs$        rc@seZdZdZdS)z IEEE80211.RTSrrNrr%r%r%r&rsrc@seZdZdZdS)z IEEE80211.CTSrNrr%r%r%r&rsrc@seZdZdZdS)z IEEE80211.ACKrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.CFEndrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.MGMT_Framerrbssidrrfrag_seqrrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.Beacon)) timestampQrintervalrrrrrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.Disassoc)reasonrrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.Assoc_Req)rrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.Assoc_Resp)r)statusrr)ZaidrrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.Reassoc_Req)rr)Z current_aprrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.Auth)) algorithmrr)Zauth_seqrrNrr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.DeauthrNrr%r%r%r&rsrc@seZdZdZddZdS)zIEEE80211.Action))categoryrOr)coderOrcCstj||ttdtjftdtjft dtj fii}z,||j |j d}||j |j d}Wn*t k rtd|j |j fYnX||j}t||||j|_dS)Nblock_ack_requestblock_ack_responseblock_ack_delbarrzKeyError: category=%s code=%s)rrrd BLOCK_ACKBLOCK_ACK_CODE_REQUESTrBlockAckActionRequestBLOCK_ACK_CODE_RESPONSEBlockAckActionResponseBLOCK_ACK_CODE_DELBABlockAckActionDelbarrrerrgrh)r$rjZ action_parserr field_nameror%r%r&rds$  zIEEE80211.Action.unpackNrqrrrsrrdr%r%r%r&rsrc@seZdZdZdS)zIEEE80211.BlockAckActionRequest)dialogrOr parametersrrtimeoutrr)Z starting_seqrrNrr%r%r%r&rsrc@seZdZdZdS)z IEEE80211.BlockAckActionResponse)r) status_coderrrrNrr%r%r%r&r"src@seZdZdZdZdS)zIEEE80211.BlockAckActionDelba<))delba_param_setrr) reason_coderrN)rqrrrsZ__byte_order__rr%r%r%r&r*src@seZdZdZdS)zIEEE80211.DatarNrr%r%r%r&r2src@seZdZdZdS)zIEEE80211.DataFromDS)rrrrNrr%r%r%r&r:src@seZdZdZdS)zIEEE80211.DataToDS)rrrrNrr%r%r%r&rBsrc@seZdZdZdS)zIEEE80211.DataInterDS)rr)darrr)sarrNrr%r%r%r&rJsrc@seZdZdZdS)zIEEE80211.QoS_Data))controlrrNrr%r%r%r&rSsrc@seZdZdZddZdS)z IEEE80211.IE)idrOrrarOrcCs&tj|||d|jd|_dS)Nr)rrrdrainforr%r%r&rd^szIEEE80211.IE.unpackNrr%r%r%r&rRXsrRc@seZdZdZdS)z IEEE80211.FH)rr)Zturr)ZhopsetrOr)Z hoppatternrOr)ZhopindexrOrNrr%r%r%r&rUbsrUc@seZdZdZdS)z IEEE80211.DS)rr)chrOrNrr%r%r%r&rWlsrWc@seZdZdZdS)z IEEE80211.CF)rrcountrOrZperiodrOr)maxrr)ZdurrrNrr%r%r%r&rYssrYc@seZdZdZddZdS)z IEEE80211.TIM)rrr r )ZctrlrrcCs&tj|||d|jd|_dS)Nr r)rrrdraZbitmaprr%r%r&rdszIEEE80211.TIM.unpackNrr%r%r%r&r[}sr[c@seZdZdZdS)zIEEE80211.IBSS)rr)ZatimrrNrr%r%r%r&r]sr])7rqrrrs__doc__rrr'rr,r/r2r5r8r;r>rArDrGrmobjectrtrprdrrrrrrrrrrrrrrrrrrrrrrrrrrRrUrWrYr[r] __classcell__r%r%r{r&rxs                          ]3     rcCsd}t|dd}|jdkst|jtks,t|jtks:t|jdksHt|jdksVt|j dksdt|j dksrt|j dkst|j dkst|j jdksttd|ddd}|j|kstdS)NsTrursr)rr'AssertionErrorr,rr/rr2r5r>rArDrGrrrcrdrusieeerur%r%r&test_802211_acks rcCs<d}t|dd}|jdkst|jtks,t|jtks:t|jdksHt|jdksVt|j dksdt|j dksrt|j dkst|j dkst|j jdkst|j jdkst|jjdkst|jjdkst|jjd kst|jjd kst|jjd kst|jjd ksttd |ddd}|j|ks8tdS)Ns &j0&j0w 2f1CAEN $US   n*-n0(20H`l6Qc=Ycse-39126@P'BC^b2/@@@ @4@Trrs&j0i1rsCAENs $srr)rr'rr,rr/rr2r5r>rArDrGrrrr}rrnrHrgrIrKrMrcrdrurr%r%r&test_80211_beacons, rcCsd}t|dd}|jtkst|jtks,t|jjdksrArDrG) ieee80211r%r%r&test_ieee80211_properties\sDr+cCst}|jdkstd|_|jdks*t|jdks8td|_|jdksLt|jdksZtd|_|jdksnt|jdks|td|_|jdkstdSr))rrrrrrr)blockackr%r%r&test_blockack_propertiessr-c Csddl}ddlm}|d}t|}|jgks2t|d}t|}t|drPt|d}|jtj ddt|W5QRXdS) Nr unhexlifyZ0400000000000000000000000000000000000000000000000Z0900000000000000000000000000000000000000000000000rPZ0c000000zKeyError: type=3 subtype=0match) pytestbinasciir/rrPrhasattrraisesrr)r2r/rjr*r%r%r&test_ieee80211_unpacks"   r6cCsBddlm}|dd}t|}|jdks0t|jdks>tdS)Nrr.Z 00000000000000000000000000000000s)r3r/rrrrrg)r/rjr,r%r%r&test_blockack_unpacks  r8c CsFddl}ddlm}|d}|jtjddt|W5QRXdS)Nrr.Z0100zKeyError: category=1 code=0r0)r2r3r/r5rrrr)r2r/rjr%r%r&test_action_unpacks r9)rr __future__rrrcrrcompatrrrrrrrrrrrrrrrrrrZ C_PS_POLLrrrrZ C_CF_END_ACKrZ D_DATA_CF_ACKZD_DATA_CF_POLLZD_DATA_CF_ACK_POLLrZD_CF_ACKZ D_CF_POLLZ D_CF_ACK_POLLrZ D_QOS_CF_ACKZ D_QOS_CF_POLLZD_QOS_CF_ACK_POLLrZD_QOS_CF_POLL_EMPTYrrrr!r*r-r0r3r6r9r<r?rBrEr"r+r.r1r4r7r:r=r@rCrFrQrSrTrVrXrZr\r^r_r`rbrrrrrrrrrrrrrrrrrrrrr r!r"r#r&r'r(r+r-r6r8r9r%r%r%r&s     &#  /&