U v`K @sdZddlmZddlmZddlmZddlmZddlmZddlm Z dd l Z ej ej ej ejejejgZGd d d ejZGd d d ejZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZej eej eej eejeejeejeiZddZddZd d!Zd"d#Z d$d%Z!d&d'Z"d(d)Z#d*d+Z$d,d-Z%d.d/Z&d0d1Z'd2d3Z(d4d5Z)d6d7Z*d8d9Z+d S):zInternet Protocol, version 6.)print_function)absolute_import)dpkt)ip)tcp) compat_ordNc@seZdZdZdZejjZeddZ e j ddZ eddZ e j ddZ ed d Z e j d d Z d d Z ddZddZddZeddZeddZdS)IP6zInternet Protocol, version 6. TODO: Longer class information.... Attributes: __hdr__: Header fields of IPv6. TODO. )) _v_fc_flowIi`)plenHrnxtBr)hlimrr)src16s)dstrrcCs |jd?S)Nr selfr`/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/ip6.pyv'szIP6.vcCs|jd@|d>B|_dS)Nl`rrrrrrrr+scCs|jd?d@S)Nrrrrrfc/szIP6.fccCs|jd@|d>B|_dS)Nirrrrrrr 3scCs |jd@S)Nrrrrrflow7szIP6.flowcCs|jd@|d@B|_dSNir!rrrrrr";sc Cstj||i|_g|_|jr2|jd|j}n|j}|j}|tkrt ||}||j|<|j |||j d}t |dd}q>|dk r||_ z,|j|||_t||jjj|jWn ttjfk r||_YnXdS)Nr)rPacketunpackextension_hdrsall_extension_headersr datarEXT_HDRS EXT_HDRS_CLSappendlengthgetattrp_protoswsetattr __class____name__lowerKeyErrorZ UnpackError)rbufZ next_ext_hdrextrrrr%?s(    z IP6.unpackcCs|j}t|dr<|jr<|jdj}|ddd|jDfSd}t|dr|tD],}||jkrN|j|j}|t|j|7}qN||fS)Nr'rcss|]}t|VqdSN)bytes).0r6rrr jsz"IP6.headers_str..r&)rhasattrr'joinr)r&r9)rr header_strhdrrrr headers_strds    zIP6.headers_strcCs|\|_}|jdks,|jdks,|jdkr|jjst|j}td|j|j|jt |}t d|}t ||}t ||j_| |t|jS)N:z >16s16sxBHr)r@r.r(sumr9structpackrrlenrZ in_cksum_addZ in_cksum_doneZpack_hdr)rZhdr_strr.srrr __bytes__us&   z IP6.__bytes__cCsh|jt|j}t|dr8|jr8|tdd|jDSt|drd|jrd|tdd|jDS|S)Nr'css|]}t|VqdSr8rGr:hhrrrr;szIP6.__len__..r&css|]}t|VqdSr8rJrKrrrr;s) __hdr_len__rGr(r<r'rDr&values)rZbaselenrrr__len__s z IP6.__len__cCs||j|<dSr8r/)clsr.Zpktclassrrr set_protosz IP6.set_protocCs |j|Sr8rP)rQr.rrr get_protosz IP6.get_protoN)r2 __module__ __qualname____doc____hdr__rZIPr/propertyrsetterr r"r%r@rIrO classmethodrRrSrrrrr s.       %  r c@seZdZdZdS)IP6ExtensionHeaderzv An extension header is very similar to a 'sub-packet'. We just want to re-use all the hdr unpacking etc. N)r2rTrUrVrrrrr[sr[c@seZdZdZddZdS) IP6OptsHeader)rrGrrcCstj|||jdd|_g}d}||jdkrzt|j|}|dkrX|d7}Wq&t|j|d}|dkr||d7}Wq&||||j|d|d|d||d7}Wq&tk rtj Yq&Xq&||_ |d|j|_dS)Nrr)type opt_lengthr() rr$r%rGr,rr(r+ IndexErrorNeedDataoptions)rr5rdindexZopt_typerarrrr%s0 zIP6OptsHeader.unpackNr2rTrUrWr%rrrrr\sr\c@s eZdZdS)IP6HopOptsHeaderNr2rTrUrrrrrgsrgc@s eZdZdS)IP6DstOptsHeaderNrhrrrrrisric@s2eZdZdZeddZejddZddZdS)IP6RoutingHeader)rr])r`rr)Z segs_leftrr) rsvd_sl_bitsr rcCs |jd@S)Nirkrrrrsl_bitsszIP6RoutingHeader.sl_bitscCs|jd@|d@B|_dSr#rlrrrrrmscCsd}d}tj||g}|jd}|||||}t|D]"}|||||||q@||_||_|jdd|_dS)Nr^r_) rr$r%rGranger+r( addressesr,)rr5Zhdr_sizeZ addr_sizerp num_addressesirrrr%s   zIP6RoutingHeader.unpackN)r2rTrUrWrXrmrYr%rrrrrjs   rjc@sLeZdZdZddZeddZejddZeddZejd dZd S) IP6FragmentHeader)r)resvrr)frag_off_resv_mr r)idr rcCs tj|||j|_d|_dS)Nr)rr$r%rMr,r(rr5rrrr%szIP6FragmentHeader.unpackcCs |jd?S)Nrurrrrfrag_offszIP6FragmentHeader.frag_offcCs|jd@|d>B|_dS)NirxryrrrrrzscCs |jd@S)Nrryrrrrm_flagszIP6FragmentHeader.m_flagcCs|jd@|d@B|_dS)Nirryrrrrr{ sN) r2rTrUrWr%rXrzrYr{rrrrrss   rsc@seZdZdZddZdS) IP6AHHeader)rr])rtr rspir rseqr rcCs<tj|||jdd|_|jd|jdd|_dS)Nr_r)rr$r%rGr,r( auth_datarwrrrr%szIP6AHHeader.unpackNrfrrrrr|sr|c@seZdZdZddZdS) IP6ESPHeader)r}rcCs$tj|||jt|j|_dSr8)rr$r%rMrGr(r,rwrrrr%%szIP6ESPHeader.unpackNrfrrrrrsrcCsVd}t|}|jdkst|jdks(t|jdks6td|j_t|}||ksRtdS)NP`(@$rF  }5?rAr)r rAssertionErrorr r"r(rDr9rH_ips2rrrtest_ipg4srcCs8d}t|}t|}|ddks$t|ddks4tdS)Nrrs$rsr)r dictr)rHrdrrr test_dictEs rcCsFd}t|}t|}t|jdjdks,t|js6t||ksBtdS)Nd`<+@ H G  "PP +r_)r r9rGr&rprrrrrrtest_ip6_routing_headerRs  rcCsd}t|}|jdkst|jdks(t|jdks6t|jdksDtd|_d|_d|_t||ksftd}t|}t||kstdS)NsrAiirrs8`,"3)`,) rsrrrvrzr{rur9r )rHfhrrrrtest_ip6_fragment_header`srcCs6d}t|j}t|dksttt||ks2tdS)N(;rx)r\rdrGrr9)rHrdrrrtest_ip6_options_headerws rcCsXd}t|}|jdkst|jdks(t|jdks6t|jdksDtt||ksTtdS)N;xxxxxxxxsxxxxxxxxii)r|r,rrr~rr9)rHahrrrtest_ip6_ah_headersrcCs<d}t|}|jdkst|jdks(tt||ks8tdS)NsDDOhͱ_aeBx JUM=Ԡ9t% ̶xD)rr,rr~r9)rHZesprrrtest_ip6_esp_headers rcCsd}t|}d}t||jd<d}t||jd<d}t||jd<d}t||jd <t|jd ksft|`t|t|t|t|t|t|kstdS) Nrrrs,r3s;<) r rgr&rsr|rirGrr')r.rorrZdorrrtest_ip6_extension_headerssrcCsd}t|}|jdkst|j}t|dks0tt|dtsBtt|dtsTtt|dtsftt||ksvtt|t|kstdS)Nso`G<@<<,,<,: PayLoadrCrrxr) r r.rr'rG isinstancerirsr9)rHrhdrsrrrtest_ip6_all_extension_headerssrcCst}d|_d|_d|_tj|_d|_d|_t }d|_ d|_ d|_ t j|_||_t|j|_|j_tt|d ks|t|jt jkstd |_d }i|_t||jd <t j|jd _t j|_t _|\}}t|t|j|_t|st|jt jkst|jt jkstdS) Ni Pig!sȺsd @*@rrr)rZTCPwindportZsportZTH_ACKflagsrZackr rrrrZ IP_PROTO_TCPrr(rGr Zulenr9rr.r&rgIP_PROTO_HOPOPTSprotor@)tZippr_pZexthdrsrrrtest_ip6_gen_tcp_acks6  rc Csddl}d}ddlm}||s$t||js2t||jjsBt||jjjsTt|tj t ||jjjW5QRXddl m }|d}t |}|jgkst|jdkstdS)NrsRToRT3ن`:P4H$Pm€F םk:Xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa )Ethernet) unhexlifyZ0000000000000000s)pytestZ dpkt.ethernetrrip6Zicmp6r(Zraisesrrcr binasciirr\rd)rrHrrZ buf_ip6_optsZip6optrrr test_ip6_optss    rcCs,t}|jdkstd|_|jdks(tdS)Nri)rjrmr)Zip6rhrrrtest_ip6_routing_propertiessrcCsNt}|jdkstd|_|jdks(t|jdks6td|_|jdksJtdS)Nri90r)rsrzrr{)Zip6fhrrrtest_ip6_fragment_propertiessrcCspt}|jdkstd|_|jdks(t|jdks6td|_|jdksJt|jdksXtd|_|jdksltdS)NrA rrr)r rrr r")rrrrtest_ip6_propertiessrcCs>Gddd}dtjksttd|td|ks:tdS)Nc@s eZdZdS)z#test_proto_accessors..ProtoNrhrrrrProto*srPROTO)r r/rrRrS)rrrrtest_proto_accessors)s r),rV __future__rrrrrcompatrrErZIP_PROTO_ROUTINGZIP_PROTO_FRAGMENTZ IP_PROTO_AHZ IP_PROTO_ESPZIP_PROTO_DSTOPTSr)r$r r[r\rgrirjrsr|rr*rrrrrrrrrrrrrrrrrrrs\      -#     $#