U v`Ez@sdZddlmZddlmZddlZddlmZddlmZddlm Z dd l m Z m Z m Z d Zd Zd Zd ZeeeZeeeZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&d Z'd!Z(d"Z)d#Z*e+eeee gZ,Gd$d%d%ej-Z.d&d'Z/d(d)Z0Gd*d+d+ej-Z1Gd,d-d-ej-Z2Gd.d/d/ej-Z3d0d1Z4d2d3Z5d4d5Z6d6d7Z7d8d9Z8d:d;Z9dd?Z;d@dAZdFdGZ?dHdIZ@dJdKZAdLdMZBdNdOZCdPdQZDdRdSZEdTdUZFdVdWZGdXdYZHdS)Zz Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation. )print_function)absolute_importN)crc32)dpkt)llc) compat_ord iteritemsisstr@iiiiii i i5iiiii7i݆i iGiHicidïiXeic@s|eZdZdZddddeffZiZiZddZdd Z d d Z d d Z ddZ ddZ eddZeddZeddZdS)EthernetzEthernet. Ethernet II, LLC (802.3+802.2), LLC/SNAP, and Novell raw 802.3, with automatic 802.1q, MPLS, PPPoE, and Cisco ISL decapsulation. Attributes: __hdr__: Header fields of Ethernet. TODO. )dst6s)srcrrtypeHcOsFd|_tjj|f|||jrBt|js6t|jtrB||jdSN) _next_typerPacket__init__datar isinstancebytes _unpack_data)selfargskwargsr!e/private/var/folders/0j/yyfkg7712236ncpm167bvylc27vst9/T/pip-unpacked-wheel-y9gppv54/dpkt/ethernet.pyrJs zEthernet.__init__c Cs|jtkrrg|_tdD]<}t|}||jd}|j||j|_|jtkrqVq|jd \|_ |_ |_ n|jt ks|jtkr*g|_g|_tdD]@}t|}||jd}|j||j| |jrqqt|ddkrt|_n4t||jkr*|dddkr$|dd}t|_z:|jp8|j}|j|||_t||jjj|jWn"ttjfk r||_YnXdS)NrEsr ) r_ETH_TYPES_QINQ vlan_tagsrange VLANtag8021Q __hdr_len__appendrETH_TYPE_8021Qas_tuplevlanidprioritycfi ETH_TYPE_MPLSETH_TYPE_MPLS_MCASTlabels mpls_labels MPLSlabelsr ETH_TYPE_IPlen ETH_TYPE_TEB_typeswrsetattr __class____name__lowerKeyErrorrZ UnpackError)rbuf_tagilblZeth_typer!r!r"rRs@       zEthernet._unpack_datacCstj|||jdkr0|j|_||jnn|jdsH|jdr|t |}||j d}|g|_ |j |_ ||n"|jdrt|_|jt|jdd|_|_n|jtkr||jn|j}|_t|j}||kr|j|d}t|dkrB|dkrBd|}|d|}||dkrB||_||d}t|dkrvtd |ddd |_|dd}|r||_t|jd||_|_dS) Ni s sr#r .>Ir)rrunpackrrrrr startswith VLANtagISLr*r'idvlan ETH_TYPE_IPXr:ipxETH_TYPE_UNKNOWNr8paddingstructfcstrailerrLLC)rr@rBZeth_lendata_lentailZpad_lenrQr!r!r"rIsD    "        zEthernet.unpackc Csd}|j}d}t|ddr\|jD] }d|_q d|_|ttfkrBt}ddd|jD}nt|ddrN|j}t|jt j r|j |jj |j}|jd}t|jdkrt|tr|tkrt}||_nt|trd|_d }nXt|jd kr,|jd}t|tr$t|tr$t|_|tkr$t}||_n t d dd d|jD}n"t|jt j rp|j |jj |}t|jtjrt|j}t j |dd td|}|s||S||SdS)NrFr4rrcss|]}|VqdSrpack_hdr).0rDr!r!r" sz$Ethernet.pack_hdr..r'Tr#)maximum is 2 VLAN tags per Ethernet framecss|]}|VqdSrrX)rZrBr!r!r"r[sz>H)rgetattrr4r6r1r2joinrrrr _typesw_revgetr<r'r8r)r&r,rKETH_TYPE_8021AD PackErrorrrUrYrRpack) rZtags_bufnew_typeZis_islrDZ last_tag_typet1t2Zhdr_bufr!r!r"rYsP           zEthernet.pack_hdrcCsd}t|jtjrd}t|dr|jr.|j}np|t|j}t|ddrjt|j dt rj|t j d}|t|dd7}t |d@}t dt d|d}t d|}t|dd|t|d d}ttj||S) NrrSr'rrQlz.rQrrSr rT) r^rr__len__sumrrrrUr8rh)rtags_lenr!r!r"rls zEthernet.__len__cCs||j|<||j|<dSr)r:r`)clsrkZpktclassr!r!r"set_types zEthernet.set_typecCs |j|Sr)r:)rprkr!r!r"get_typeszEthernet.get_typecCs |j|Sr)r`)rpkr!r!r" get_type_rev!szEthernet.get_type_revN)r= __module__ __qualname____doc__r7__hdr__r:r`rrrIrYrirl classmethodrqrrrtr!r!r!r"r7s& .>;   rc Cst}t|D]h\}}|dr|dd}|}z$t||dd}t|t||Wqtt fk rtYqYqXqtt tdS)NZ ETH_TYPE_ r)level) globalsr rJr> __import__rrqr^ ImportErrorAttributeErrorr9)grsvnamemodnamemodr!r!r" __load_types's   rcCstjs tdS)zAPost-initialization called when all dpkt modules are fully loadedN)rr:rr!r!r!r" _mod_init6src@s,eZdZdZdZddZddZddZd S) r5z"A single entry in MPLS label stack))_val_exp_s_ttlIrcCsTtj|||jd@d?|_|jd@d?|_|jd@d?|_|jd@|_d|_dS) Nlp irzr) rrrIrvalexpr6ttlrrr@r!r!r"rIGs  zMPLSlabel.unpackcCsB|jd@d>|jd@d>B|jd@d>B|jd@B|_tj|S)Nirrzrrr)rrr6rrrrrYrr!r!r"rYOs   zMPLSlabel.pack_hdrcCs|j|j|jfSr)rrrrr!r!r"r-XszMPLSlabel.as_tupleN)r=rurvrwrxrIrYr-r!r!r!r"r5?s  r5c@s6eZdZdZdddeffZddZddZd d Zd S) r)zIEEE 802.1q VLAN tag) _pri_cfi_idrrrrcCsDtj|||jd@d?|_|jd@d?|_|jd@|_d|_dS)Ni irr)rrrIrprir0rLrrr!r!r"rIds  zVLANtag8021Q.unpackcCs4|jd@d>|jd@d>B|jd@B|_tj|S)Nrrrrr)rr0rLrrrrYrr!r!r"rYks  zVLANtag8021Q.pack_hdrcCs|j|j|jfSr)rLrr0rr!r!r"r-sszVLANtag8021Q.as_tupleN) r=rurvrwr7rxrIrYr-r!r!r!r"r)\sr)c@s$eZdZdZdZddZddZdS)rKz Cisco Inter-Switch Link VLAN tag) )daZ5srE) _type_priB)sarr)r8rr)Zsnap3ss)Zhsars )_id_bpdurr)Zindxrr)resrrcCsLtj|||jd@d?|_|jd@|_|jd?|_|jd@|_d|_ dS)Nr rrr) rrrIrrrrrLbpdurrr!r!r"rIs    zVLANtagISL.unpackcCs@|jd@d>|jd@B|_|jd@d>|jd@B|_tj|S)Nr rir) rrrrLrrrrrYrr!r!r"rYszVLANtagISL.pack_hdrN)r=rurvrwrxrIrYr!r!r!r"rKws rKcCs~ddlm}ddlm}d}t|}|s,tt|j|js>tt|jj|jsRtt |t |ksftt |t |ksztdS)Nrip6)tcps^r$ކ`(@$rPg }:a) rrrAssertionErrorrrIP6ZTCPstrr8)rrr6ethr!r!r"test_eths  rcCsNd}t|}|st|jtks"tt|t|ks6tt|t|ksJtdS)Ns@)rrrrPrr8)r6rr!r!r"test_eth_zero_ethtypes rc Csvddlm}tddtdd}t|j|js.ttdd|jddd d d d }t|t|ks^tt |t |ksrtdS) NrarpsPQRSTUsABCDEFs123456abcd7890abwxyz)rrrrs123456sabcds7890abswxyzshaZspaZthaZtpa)rrr) rrr ETH_TYPE_ARPrrARPrrr8)rZeth1eth2r!r!r"test_eth_init_with_datas rcCspd}t|}|jdkst|jdks(t|jdks6t|jdksDtt|t|ksXtt|t|ksltdS)Ns rr)r5rrrr6rrr8)r6mr!r!r"test_mpls_labelsrcCs|d}t|}|jdkst|jdks(t|jdks6tt|t|ksJtd|_t|tdksdtt|t|ksxtdS)Nsverrvrsve)r)rrr0rLrr8r6rkr!r!r"test_802dot1q_tagsrcCsbd}t|}|jdkst|jdks(t|jdks6tt|t|ksJtt|t|ks^tdS)Ns ,Wri+r)rKrrrLrrr8rr!r!r" test_isl_tagsrcCs,ddlm}d}t|}|jdks&t|jdks4t|jdksBtt|jdksTt|jdj t kshtt |j |j sztt|t|kstdt|t|kstdt|t|kstt|j|j|j|j d }t|t|kst|`|`|`|`t|t|dd d |d dks(tdS) NripsF`@@$ E4;d@@ pQQ[6|p  r rpack 1pack 2rrr'rr)rrrr0rr.r/r8r'rr7rrIPrrr)rr6rrr!r!r"test_eth_802dot1qs  rc Csddlm}ddl}ddlm}|d}t|}|jtks>tt |j dksPt|j dj dksdt|j dj dksxt|j djtkst|j djt kstd d |j Dd d gkstt |j|jstt |t |kstt||kst|j |j d7_ |jtjd dt|W5QRXt|j|j|j dd|jd}t|t|ddd|ddksxt|` |`|`|`t|t|ddd|ddkstdS)Nr unhexlifyrrZ001bd41ba4d80013c3dfae18810000768100000a080045000064000f0000ff01929b0a760a010a760a020800ceb70003000000000000001faf70abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdr#r cSsg|] }|qSr!)r-rjr!r!r" sz-test_eth_802dot1q_stacked..)rrr)rrrr\)matchrrsr r)binasciirpytestrrrrr,rr8r'rLr7rrrrZraisesrrcrrrr0r.r/)rrrr6rrr!r!r"test_eth_802dot1q_stackeds0   .rcCshddlm}d}t|}t|jdks*t|jdjtks>t|jdjtksRtt |j |j sdtdS)Nrrs@ d r#r) rrrr8r'rrr,rrrr)rr6rr!r!r"test_eth_vlan_arp0s rcCsBddlm}ddlm}d}t|}t|jdks6t|jdjdksJt|jdjdks^t|jd d gksptt |j |j stt |j j |j stt |t |kstd t |t |kstd t|t|kstt|j|j|j|j d }t |t |kst|`|`t |t |ddd|ddks>tdS)Nrr)icmpsz090(8G EdP  "eSͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫͫr#rrr)rrr)rrrrr)rrr4rrrr)rrrrr8r4rrr3rrrZICMPrrr)rrr6rrr!r!r"test_eth_mpls_stacked>s"  rcCsJddlm}d}t|}|jdks&tt|jdks8t|jdjdksLt|jdjdks`t|j dksnt|j dks|tt |j t jstt |j j |jstt|t|kstd t|t|kstd t|t|kstt|j|j|j|j d }d|_ d|_ t|t|ks t|`|`t|t|d dksFtdS) NrstpsZ ,,&BB,,&AuiMrriuArrr)rrrrMrr8r'rLrrSrQrrrrUSTPrrrrr6rrr!r!r"test_isl_eth_llc_stpZs( rcCsddlm}d}t|}t|jtjs*tt|jj|js>tt |jjj dksTtt |t |ksltdt |t |kstdt |t |kstdS)Nr)cdpsb 2kT ,BR2Cisco IOS Software, 3700 Software (C3745-ADVENTERPRISEK9_SNA-M), Version 12.4(25d), RELEASE SOFTWARE (fc1) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2010 by Cisco Systems, Inc. Compiled Wed 18-Aug-10 08:18 by prod_rel_teamCisco 3745 FastEthernet0/0)  rrr) rrrrrrrUrZCDPr8Ztlvsr)rr6rr!r!r"test_eth_llc_snap_cdps rcCsddlm}d}t|}t|jtjs*tt|jj|js>t|jjj dksPtt |t |kshtdt |t |kstdt |t |kstdS)Nr)rOsb"TPU"U__MSBROWSE__rr) rrOrrrrrUrIPXptrr8)rOr6rr!r!r"test_eth_llc_ipxs rcCsddlm}ddlm}ddlm}ddlm}d}t|}t|j|jsNt t|jj|j sbt t|jjj|j sxt t|jjjj|j st t |t |kst t|t|kst dS)Nrr)ppp)pppoe)udpswddWn:"#:g$  )rrrrrrrrZPPPoErZPPPrZUDPrr8)rrrrr6rr!r!r"test_eth_pppoes    rcCsddlm}d}t|}t|jdks*t|jdjdks>t|jdjdksRt|j}t|tsft|jdksttt |d rt|j d kstt|jt j stt|jj|j st|jjjd kstdS) NrrsV \ \G  \&BB \ \r#rrr&rSri)rrrr8r4rrrrrhrQrrUrZport_idrr!r!r"test_eth_2mpls_ecw_eth_llc_stps rcCsddlm}d}t|}|jtks&t|jdjdks:t|jdjdksNtt|j |j s`tt|dd}tdd tt dddd t dddd g|j d d d ddddddd}t |t |kstdS)Nrrs dETݿUUOd NE rFmbzrdiNs s)rrLr0iiTrisUsUr)r8rLrprmrropts)rrrr'r) rrrrrbrr'rLrrrr)r)rr6re1e2r!r!r"test_eth_802dot1ad_802dot1q_ips6    rcCstdd}t|stdS)Ns12345)r)rrr)rr!r!r" test_eth_packs rcCsjd}d|}t|}|jtks"tt|jdks4t|jdjtksHtt|jt sXt|j|ksftdS)NsxlS7-300"plcxb300xkcpuxa317-2xapnxrdp22cf*<s       q      -*