
    he                     2   d Z ddlmZ ddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZ ddlmZ ddlmZ ddlm Z  dd	l!m"Z" dd
l#m$Z$m%Z%  G d de          Z& G d de          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+ G d de          Z, G d de          Z- G d de          Z. G d de          Z/i Z0d Z1 e1d           G d  d!e/                      Z2 e1d"           G d# d$e/                      Z3 e1d%           G d& d'e/                      Z4 e1d(           G d) d*e/                      Z5 e1d+           G d, d-e/                      Z6 e1d.           G d/ d0e/                      Z7 e1d1           G d2 d3e/                      Z8 e1d4           G d5 d6e/                      Z9 e1d7           G d8 d9e/                      Z: e1d:d;d<           G d= d>e/                      Z; e1d?           G d@ dAe/                      Z< e1dB           G dC dDe/                      Z= e1dE           G dF dGe/                      Z> e1dH           G dI dJe/                      Z? e1dK           G dL dMe/                      Z@ eee&dNO            ee&e(ddP            ee&e(d"dP            ee&e'dd"P            ee&e'd"d"P            ee&e*dd%P            ee&e,dd+P            ee&e-ddQP            ee&e.dd7P            ee'e/            ee/e/            ee/edO            ee)e            ee+e            G dR dSeA          ZBdTS )UzGLLTD Protocol

https://msdn.microsoft.com/en-us/library/cc233983.aspx

    )array)BitField
FlagsField	ByteFieldByteEnumField
ShortFieldShortEnumFieldThreeBytesFieldIntFieldIntEnumField	LongFieldMultiEnumFieldFieldLenFieldFieldListFieldPacketListFieldStrLenFieldStrLenFieldUtf16ConditionalFieldMACField)PacketPaddingbind_layers)
PacketList)Ether)IPField)IP6Field)	ETHER_ANY)orbchbc                   l   e Zd Zd ZdddZ edd           edddd	d
d           edd           edddddddddddddddddddddddd d!d"d#d$d%d&d'd(dd) d*+           ed,d-           ed.d-           e	 e
d/d          d0            e	 e
d1d          d2           gZd3 Zd4 Zd5 Zd6 Zd-S )7LLTD)r   r   )r      ))   r#   )r      versionr#   tosr   zTopology discoveryzQuick discoveryzQoS diagnostics)r   r#      reservedfunctionDiscoverHelloEmitTrainProbeAckQuery	QueryRespResetChargeFlatQueryLargeTlvQueryLargeTlvResp)r   r#   r'                     	   
   r"   r$   )r   r#   r<   QosInitializeSinkQosReadyQosProbeQosQueryQosQueryRespQosResetQosErrorQosAckQosCounterSnapshotQosCounterResultQosCounterLease)r   r#   r'   r7   r8   r9   r:   r;   r<   r=   r>   c                     | j         S N)r&   pkts    U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/layers/lltd.py<lambda>zLLTD.<lambda>Q   s    #'     B)
depends_onfmtreal_dstNreal_srcxidc                     | j         dv S N)r   r<   r)   rL   s    rN   rO   zLLTD.<lambda>U   s    S\V%; rP   seqc                     | j         dvS rX   rY   rL   s    rN   rO   zLLTD.<lambda>W   s    S\%? rP   c                 v   | j         | j        t          | j        t                    r| j        }| j         <|d d         |j        d                             ||j                  z   |dd          z   }| j        <|d d         |j        d                             ||j                  z   |dd          z   }||z   S )Nr8   r   r>   r#      )	rT   rU   
isinstance
underlayerr   fields_desci2mdstsrc)selfrM   payeths       rN   
post_buildzLLTD.post_buildZ   s    M!T]%:dou-- &;/C}$2A2w!3!7!7SW!E!EE233x }$3B3x#/!"4"8"8cg"F"FF233x SyrP   c                     t          | j        t                    r| j                            d          S |                     d          S )Nz/LLTD %src% > %dst% %LLTD.tos% - %LLTD.function%zLLTD %tos% - %function%)r^   r_   r   sprintfrd   s    rN   	mysummaryzLLTD.mysummaryf   sH    dou-- 	;?**A   << 9:::rP   c                 b    | j         | j        }}d| j                            ||f||f          z  S )Ns   %c%c)r&   r)   answer_hashretget)rd   r&   r)   s      rN   hashretzLLTD.hashretn   sB    $-X,00#x25xB B B 	BrP   c                    t          |t                    sdS | j        dk    r| j        dk    rt          | j        t
                    rnt          | t
                   j                  dk    rK|j        dk    o?|j        dk    o4t          |v o+|t                   j	        | t
                   j        d         k    S | j        dk    r&|j        dk    o|j        dk    o|j
        | j
        k    S nV| j        dk    rK| j        dk    r@t          | j        t                    r&|j        dk    o|j        dk    o|j        | j        k    S dS )NFr   r#   r$   r"   )r^   r!   r&   r)   payloadLLTDDiscoverlenstations_listLLTDAttributeHostIDmacrZ   	LLTDHellorU   current_mapper_address)rd   others     rN   answerszLLTD.answerss   sW   %&& 	58q==}!!j|&L&L!tL)788A== yA~ 8Na'8'508 -.2&4Q788
 "$$ yA~ .%.B*> .	TX-.	 % X]]}!!jy&I&I! yA~ B%.A*= BNd&AABurP   )__name__
__module____qualname__namerm   r   r   r   r   r   r   r`   rg   rk   ro   rz    rP   rN   r!   r!      s       D 	 N 		)QeQ#  !
 !
 	 	
 		*a  z1#'     '!'%% +"'
 "'
D *)sE"	4 "	4 "	4F 	T""T""E1--;;	= 	=E1--??	A 	A_1Kf
 
 
; ; ;B B B
    rP   r!   c                   \    e Zd ZdZdZ edd           ede           ede          gZdS )rw   zLLTD - HelloF
gen_numberr   rx   apparent_mapper_addressN)	r{   r|   r}   r~   show_summaryr   r   r   r`   r   rP   rN   rw   rw      sN        DL
<##)955*I66KKKrP   rw   c            
           e Zd ZdZ edd           edddd           edg  ed	e          d
           gZ	d Z
dS )rr   zLLTD - Discoverr   r   stations_countNrt   Hcount_ofrS    c                     | j         S rK   )r   rL   s    rN   rO   zLLTDDiscover.<lambda>   s	    c.@ rP   
count_fromc                 N    | j         r|                     d          ndt          gfS )NzStations: %stations_list%z
No station)rt   ri   r!   rj   s    rN   rk   zLLTDDiscover.mysummary   s2    %88999+7$A 	ArP   )r{   r|   r}   r~   r   r   r   r   r   r`   rk   r   rP   rN   rr   rr      s        D
<##&	 	 	HHR,C,C"@"@	B 	B 	B	KA A A A ArP   rr   c                   v    e Zd ZdZ eddddd           edd           edd	           ed
e          gZd	S )LLTDEmiteeDesczLLTD - Emitee Desctyper   r-   r.   r   r#   pauserc   Nrb   )	r{   r|   r}   r~   r   r   r   r   r`   r   rP   rN   r   r      s`        DfaW!9!9::	'1	""	KKKrP   r   c                   V    e Zd ZdZ edddd           edg ed           gZd	 ZdS )
LLTDEmitzLLTD - Emitdescs_countN
descs_listr   r   c                     | j         S rK   r   rL   s    rN   rO   zLLTDEmit.<lambda>       s rP   r   c                 Z    d                     d | j        D                       t          gfS )Nz, c              3   @   K   | ]}|                     d           V  dS )z%src% > %dst%N)ri   ).0descs     rN   	<genexpr>z%LLTDEmit.mysummary.<locals>.<genexpr>   sB       6 6! o66 6 6 6 6 6 6rP   )joinr   r!   rj   s    rN   rk   zLLTDEmit.mysummary   s@    yy 6 6%)_6 6 6 6 68<v> 	>rP   )	r{   r|   r}   r~   r   r   r   r`   rk   r   rP   rN   r   r      so        DmTL	 	 	b.#>#>	@ 	@ 	@K> > > > >rP   r   c                   v    e Zd ZdZ eddddd           ede           ede           ed	e          gZd
S )LLTDRecveeDesczLLTD - Recvee Descr   r   r.   zARP or ICMPv6r   rU   	ether_src	ether_dstN)r{   r|   r}   r~   r	   r   r   r`   r   rP   rN   r   r      s`        Dvqg/"B"BCCY''i((i((	KKKrP   r   c                   r    e Zd ZdZ edddd           eddd           ed	g ed
           gZd Z	d Z
dS )LLTDQueryRespzLLTD - Query Responseflagsr   r'   MEr   N   r   c                     | j         S rK   r   rL   s    rN   rO   zLLTDQueryResp.<lambda>   r   rP   r   c                     | j         _t          |d                   dz  }t          | j                  }t	          ||dz	  z             t	          |dz            z   |dd          z   }||z   S Nr      r<      r'   )r   r   rs   r   r   )rd   rM   re   r   counts        rN   rg   zLLTDQueryResp.post_build   sn    # AKK$&E((Eeuz*++c%#+.>.>>QRRHCSyrP   c                 j    |                      d| j        | j        dk    rdndfz            t          gfS )Nz%d response%sr#   sr   )ri   r   r!   rj   s    rN   rk   zLLTDQueryResp.mysummary   sH    ||O#a''CCR/1 1 2 2486: 	:rP   )r{   r|   r}   r~   r   r   r   r   r`   rg   rk   r   rP   rN   r   r      s        "D
7Aq$''b))b.#>#>	@ 	@ 	@K  : : : : :rP   r   c                   Z    e Zd ZdZ edddddddd	d
d           edd          gZd ZdS )LLTDQueryLargeTlvzLLTD - Query Large Tlvr   r   z
Icon imagezFriendly NamezHardware IDzAP Association TableDetailed Icon ImagezComponent TablezRepeater AP Table)r                     offsetr   c                 <    |                      d          t          gfS )Nz%type% (offset %offset%))ri   r!   rj   s    rN   rk   zLLTDQueryLargeTlv.mysummary   s    ||677$??rP   N)r{   r|   r}   r~   r   r
   r`   rk   r   rP   rN   r   r      sw        #Dfb&%!##
 #
 	 	 	!$$K@ @ @ @ @rP   r   c                   p    e Zd ZdZ edddd           eddd           ed	d
d           gZd Zd Z	dS )LLTDQueryLargeTlvRespzLLTD - Query Large Tlv Responser   r   r'   RMrs   Nr   valuer   c                     | j         S rK   rs   rL   s    rN   rO   zLLTDQueryLargeTlvResp.<lambda>        rP   length_fromc                     | j         _t          |d                   dz  }t          | j                  }t          ||dz	  z             t          |dz            z   |dd          z   }||z   S r   )rs   r   r   r   )rd   rM   re   r   lengths        rN   rg   z LLTDQueryLargeTlvResp.post_build   sk    8 AKK$&E__Fev{+,,s6C</@/@@3qrr7JCSyrP   c                 Z    |                      d| j        dz  sdndz            t          gfS )Nz%%len%% bytes%sr'   z (last)r   )ri   r   r!   rj   s    rN   rk   zLLTDQueryLargeTlvResp.mysummary  s<    ||-!Z!^3II
  F 	rP   )
r{   r|   r}   r~   r   r   r   r`   rg   rk   r   rP   rN   r   r      sz        ,D
7Aq$''b!!GR-@-@AAAK      rP   r   c                       e Zd ZdZdZdZ eddddddd	d
ddddddddd           edddd           eddd           gZ	e
dd            ZdS )LLTDAttributezLLTD AttributeFr   r   zEnd Of PropertyzHost IDCharacteristicszPhysical MediumzIPv4 Addressz802.11 Max RatezPerformance Counter Frequencyz
Link Speedz
Icon ImagezMachine NamezDevice UUIDzQoS Characteristicsz802.11 Physical Mediumr   )r   r#   r'   r7   r;   r=   r>   r$   r               r   rs   Nr   rQ   	length_ofrS   r   c                     | j         S rK   r   rL   s    rN   rO   zLLTDAttribute.<lambda>#  r   rP   r   c                     |rt          |d                   }n<d|v r6|d         }t          |t                    r| j        d         j        |         }n| S t
                              ||           S )Nr   r   )r   r^   strr`   s2iSPECIFIC_CLASSESrn   )cls_pkt_kargscmds        rN   dispatch_hookzLLTDAttribute.dispatch_hook&  so     	d1g,,CCu__-C#s## 2oa(,S1J##C---rP   rK   )r{   r|   r}   r~   show_indentr   r   r   r   r`   classmethodr   r   rP   rN   r   r     s        DKL 	fa    /%(%"
 "
 	 	  	eTW#>>>GR-@-@AAA%K* 	. 	. 	. [	. 	. 	.rP   r   c                        fd}|S )a_  This can be used as a class decorator; if we want to support Python
    2.5, we have to replace

@_register_lltd_specific_class(x[, y[, ...]])
class LLTDAttributeSpecific(LLTDAttribute):
[...]

by

class LLTDAttributeSpecific(LLTDAttribute):
[...]
LLTDAttributeSpecific = _register_lltd_specific_class(x[, y[, ...]])(
    LLTDAttributeSpecific
)

    c                     D ]}| t           |<   t          j        d                                         }d         |_        |g| j        z   | _        | S )Nr   )r   r   r`   copydefault)r   	attr_typetype_fld
attr_typess      rN   	_registerz0_register_lltd_specific_class.<locals>._registerG  sZ    # 	. 	.I*-Y'' ,Q/4466%a=#*s6
rP   r   )r   r   s   ` rN   _register_lltd_specific_classr   6  s$    "     rP   c                       e Zd ZdZg ZdS )LLTDAttributeEOPz LLTD Attribute - End Of PropertyN)r{   r|   r}   r~   r`   r   rP   rN   r   r   Q  s        -DKKKrP   r   r#   c                   H    e Zd ZdZ edd           ede          gZd ZdS )ru   zLLTD Attribute - Host IDrs   r:   rv   c                 2    d| j         z  t          t          gfS )NzID: %s)rv   r!   LLTDAttributeMachineNamerj   s    rN   rk   zLLTDAttributeHostID.mysummary_  s    $("T+C$DDDrP   N)	r{   r|   r}   r~   r   r   r   r`   rk   r   rP   rN   ru   ru   W  sR        %D	%	""K
E E E E ErP   ru   r'   c                       e Zd ZdZ eddddd            edd	d
d           edd	d           eddd           gZdS )LLTDAttributeCharacteristicsz LLTD Attribute - Characteristicsrs   N	reserved2rQ   c                     |dz   S Nr'   r   )r   xs     rN   rO   z%LLTDAttributeCharacteristics.<lambda>k  s
    !a% rP   )r   rS   adjustr   r   r9   PXFML	reserved1r"   r   c                     | j         dz
  S r   r   )r   s    rN   rO   z%LLTDAttributeCharacteristics.<lambda>n  s    1519 rP   r   )	r{   r|   r}   r~   r   r   r   r   r`   r   rP   rN   r   r   c  sz        -D
 	eT[c//	1 	1 	1
7Aq'**a$$K1D1DEEE	KKKrP   r   r7   c            
       >	   e Zd ZdZ edd           edd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.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGi dHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdii djdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddÓddœddǓddɓdd˓dd͓ddϓi ddѓddӓddՓddדddٓddۓddݓddߓddddddddddddddddddi dddddddddddddd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dddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5i d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWi dXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdyi dz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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Ɛ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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
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'          gZd(S ()  LLTDAttributePhysicalMediumz LLTD Attribute - Physical Mediumrs   r8   mediumr:   r#   ry   r'   regular1822r7   hdh1822ddnX25r9   	rfc877x25ethernetCsmacdr;   iso88023Csmacdr<   iso88024TokenBusr=   iso88025TokenRingr>   iso88026Manr"   starLanr$   proteon10Mbit   proteon80Mbitr   hyperchannelr   fddir]   lapbr   sdlcr   ds1r   e1r   	basicISDNr   primaryISDNr   propPointToPointSerial   pppr   softwareLoopback   eonr   ethernet3Mbit   nsipr   slip   ultra   ds3   sip    
frameRelay!   rs232"   para#   arcnet$   
arcnetPlus%   atm&   miox25'   sonet(   x25ple)   iso88022llc*   	localTalk+   smdsDxi,   frameRelayService-   v35.   hssi/   hippi0   modem1   aal52   	sonetPath3   sonetVT4   smdsIcip5   propVirtual6   propMultiplexor7   	ieee802128   fibreChannel9   hippiInterface:   frameRelayInterconnect;   
aflane8023<   
aflane8025=   cctEmul>   	fastEther?   isdn@   v11A   v36B   	g703at64kC   	g703at2mbD   qllcE   fastEtherFXF   channelG   	ieee80211H   ibm370parChanI   esconJ   dlswK   isdnsL   isdnuM   lapdN   ipSwitchO   rsrbP   
atmLogicalQ   ds0R   	ds0BundleS   bscT   asyncU   cnrV   iso88025DtrW   eplrsX   arapY   propCnlsZ   hostPad[   termPad\   frameRelayMPI]   x213^   adsl_   radsl`   sdsla   vdslb   iso88025CRFPIntc   myrinetd   voiceEMe   voiceFXOf   voiceFXSg   
voiceEncaph   voiceOverIpi   atmDxij   atmFunik   atmImal   pppMultilinkBundlem   
ipOverCdlcn   
ipOverClawo   stackToStackp   virtualIpAddressq   mpcr   	ipOverAtms   iso88025Fibert   tdlcu   gigabitEthernetv   hdlcw   lapfx   v37y   x25mlpz   x25huntGroup{   
transpHdlc|   
interleave}   fast~   ip   docsCableMaclayer   docsCableDownstream   docsCableUpstream   a12MppSwitch   tunnel   coffee   ces   atmSubInterface   l2vlan   l3ipvlan   	l3ipxvlan   digitalPowerline   mediaMailOverIp   dtm   dcn   	ipForward   msdsl   ieee1394   zif-gsn   dvbRccMacLayer   dvbRccDownstream   dvbRccUpstream   
atmVirtual   
mplsTunnel   srp   voiceOverAtm   voiceOverFrameRelay   idsl   compositeLink   
ss7SigLink   propWirelessP2P   	frForward   rfc1483   usb   ieee8023adLag   bgppolicyaccounting   frf16MfrBundle   h323Gatekeeper   	h323Proxy   mpls   	mfSigLink   hdsl2   shdsl   ds1FDL   pos   dvbAsiIn   	dvbAsiOut   plc   nfas   tr008   gr303RDT   gr303IDT   isup   propDocsWirelessMaclayer   propDocsWirelessDownstream   propDocsWirelessUpstream   	hiperlan2   propBWAp2Mp   sonetOverheadChannel   digitalWrapperOverheadChannel   aal2   radioMAC   atmRadio   imt   mvlr   reachDSL   frDlciEndPt   atmVciEndPt   opticalChannel   opticalTransport   propAtm   voiceOverCable   
infiniband   teLink   q2931   	virtualTg   sipTg   sipSig   docsCableUpstreamChannel   econet   pon155   pon622   bridge   	linegroup   
voiceEMFGD   voiceFGDEANA   voiceDID   mpegTransport   	sixToFour   gtp   pdnEtherLoop1   pdnEtherLoop2   opticalChannelGroup   homepna   gfp   ciscoISLvlan   actelisMetaLOOP   fcipLink   rpr   qam   lmp   cblVectaStar   docsCableMCmtsDownstream   adsl2   macSecControlledIF   macSecUncontrolledIF   aviciOpticalEther   atmbond   
voiceFGDOS   mocaVersion1   ieee80216WMAN   	adsl2plus   dvbRcsMacLayer   dvbTdm   
dvbRcsTdma   x86Laps   wwanPP   wwanPP2   voiceEBS   ifPwType   ilan   pip   aluELP   gpon   vdsl2   capwapDot11Profile   capwapDot11Bss   capwapWtpVirtualRadio   bitsr   docsCableUpstreamRfPorti  cableDownstreamRfPorti  vmwareVirtualNici  
ieee802154i  otnOdui  otnOtui  	ifVfiTypei  g9981i  g9982i	  g9983i
  aluEponi  
aluEponOnui  aluEponPhysicalUnii  aluEponLogicalLinki  aluGponPhysicalUnii  vmwareNicTeami  docsOfdmDownstreamdocsOfdmaUpstreamgfastsdci)i  i  i  N)r{   r|   r}   r~   r   r   r`   r   rP   rN   r   r   r  s        -D	%Xq U#
wU#
 }U#
 y	U#

 xU#
 {U#
 U#
 U#
 !U#
 "U#
 U#
 	U#
 U#
 U#
 U#
  !U#
" #U#
$ %U#
 U#
& 'U#
( )U#
* +U#
, -U#
. (/U#
0 1U#
2 "3U#
4 5U#
6 7U#
8 9U#
: ;U#
< =U#
> ?U#
@ AU#
B CU#
D EU#
F GU#
 U#
 U#
H IU#
J KU#
L MU#
N OU#
P QU#
R SU#
T UU#
V WU#
X 	YU#
Z #[U#
\ ]U#
^ _U#
` aU#
b cU#
d eU#
f gU#
h 	iU#
 U#
 U#
j 
kU#
l mU#
n !oU#
p qU#
r sU#
t  uU#
v (wU#
x yU#
z {U#
| 	}U#
~ U#
@ AU#
B CU#
D EU#
F GU#
H IU#
J KU#
 U#
 U#
L MU#
N 	OU#
P QU#
R SU#
T UU#
V WU#
X YU#
Z [U#
\ ]U#
^ 
_U#
` aU#
b cU#
d eU#
f gU#
h iU#
j kU#
l mU#
 U#
 U#
n oU#
p qU#
r sU#
t 
uU#
v 	wU#
x 	yU#
z {U#
| }U#
~ U#
@ AU#
B CU#
D EU#
F !GU#
H 	IU#
J KU#
L MU#
N OU#
 U#
 U#
P QU#
R SU#
T UU#
V WU#
X YU#
Z %[U#
\ ]U#
^ _U#
` aU#
b #cU#
d eU#
f gU#
h iU#
j kU#
l "mU#
n oU#
p qU#
 U#
 U#
r sU#
t uU#
v wU#
x yU#
z {U#
| }U#
~ U#
@ $AU#
B &CU#
D $EU#
F GU#
H IU#
J KU#
L MU#
N "OU#
P QU#
R SU#
 U#
 U#
T UU#
V #WU#
X "YU#
Z [U#
\ ]U#
^ _U#
` aU#
b cU#
d eU#
f !gU#
h #iU#
j !kU#
l mU#
n oU#
p qU#
r sU#
t &uU#
 U#
 U#
v wU#
x yU#
z {U#
| "}U#
~ U#
@ AU#
B CU#
D EU#
F &GU#
H !IU#
J !KU#
L MU#
N OU#
P QU#
R SU#
T UU#
V WU#
 U#
 U#
X YU#
Z [U#
\ ]U#
^ _U#
` aU#
b cU#
d eU#
f gU#
h iU#
j +kU#
l -mU#
n +oU#
p qU#
r sU#
t 'uU#
v 0wU#
x yU#
 U#
 U#
z {U#
| }U#
~ U#
@ AU#
B CU#
D EU#
F GU#
H !IU#
J #KU#
L MU#
N !OU#
P QU#
R SU#
T UU#
V WU#
X YU#
Z [U#
 U#
 U#
\ +]U#
^ _U#
` aU#
b cU#
d eU#
f gU#
h iU#
j kU#
l mU#
n oU#
p qU#
r sU#
t uU#
v wU#
x &yU#
z {U#
| }U#
 U#
 U#
~ U#
@ "AU#
B CU#
D EU#
F GU#
H IU#
J KU#
L +MU#
N OU#
P %QU#
R 'SU#
T $UU#
V WU#
X YU#
Z [U#
\ ]U#
^ _U#
 U#
 U#
` !aU#
b cU#
d eU#
f gU#
h iU#
j kU#
l mU#
n oU#
p qU#
r sU#
t uU#
v wU#
x yU#
z %{U#
| !}U#
~ (U#
@ AU#
 U#
 U#
B *CU#
D (EU#
F #GU#
H IU#
J KU#
L MU#
N OU#
P QU#
R SU#
T UU#
V WU#
X YU#
Z %[U#
\ %]U#
^ %_U#
` aU#
b %cU#
 U#
d %iU#
 U#
 U#
 U	 U	XKKKrP   r   r;   c                   B    e Zd ZdZ edd           edd          gZdS )LLTDAttributeIPv4AddresszLLTD Attribute - IPv4 Addressrs   r8   ipv4z0.0.0.0N)r{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    s8        *D	%	""KKKrP   r  r<   c                   B    e Zd ZdZ edd           edd          gZdS )LLTDAttributeIPv6AddresszLLTD Attribute - IPv6 Addressrs   r]   ipv6z::N)r{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    s8        *D	%KKKrP   r  r=   c                   B    e Zd ZdZ edd           edd          gZdS )LLTDAttribute80211MaxRatez LLTD Attribute - 802.11 Max Raters   r'   rater   Nr{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    s8        -D	%
61KKKrP   r  r>   c                   B    e Zd ZdZ edd           edd          gZdS )(LLTDAttributePerformanceCounterFrequencyz.LLTD Attribute - Performance Counter Frequencyrs   r<   freqr   N)r{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    s8        ;D	%	&!KKKrP   r  r$   c                   B    e Zd ZdZ edd           edd          gZdS )LLTDAttributeLinkSpeedzLLTD Attribute - Link Speedrs   r8   speedr   N)r{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    s8        (D	%!KKKrP   r  r   r   r   c                   ,    e Zd ZdZ edd          gZdS )LLTDAttributeLargeTLVzLLTD Attribute - Large TLVrs   r   N)r{   r|   r}   r~   r   r`   r   rP   rN   r  r    s)        'D	%KKKrP   r  r   c                   T    e Zd ZdZ edddd           eddd 	          gZd
 ZdS )r   zLLTD Attribute - Machine Namers   NhostnamerQ   r   r   c                     | j         S rK   r   rL   s    rN   rO   z!LLTDAttributeMachineName.<lambda>  s     rP   r   c                 2    d| j         t          t          gfS )Nz
Hostname: )r  r!   ru   rj   s    rN   rk   z"LLTDAttributeMachineName.mysummary  s"    .T]..*+- 	-rP   )r{   r|   r}   r~   r   r   r`   rk   r   rP   rN   r   r     s^        *DeTZSAAAR5H5HIIIK
- - - - -rP   r   r   c                   N    e Zd ZdZ edddd           eddd 	          gZdS )
LLTDAttributeDeviceUUIDzLLTD Attribute - Device UUIDrs   NuuidrQ   r   s                   c                     | j         S rK   r   rL   s    rN   rO   z LLTDAttributeDeviceUUID.<lambda>  s    #' rP   r   )r{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    sH        )DeTV===FL6I6IJJJKKKrP   r  r   c                   t    e Zd ZdZ edd           edddd           eddd	           ed
d          gZdS )LLTDAttributeQOSCharacteristicsz$LLTD Attribute - QoS Characteristicsrs   r8   r   r   r7   EQPr   r  r   N)	r{   r|   r}   r~   r   r   r   r   r`   r   rP   rN   r  r    s\        1D	%
7Aq%((a$$
;""	KKKrP   r  r   c                   T    e Zd ZdZ edd           edddddd	d
ddd          gZdS ) LLTDAttribute80211PhysicalMediumz'LLTD Attribute - 802.11 Physical Mediumrs   r#   r   r   UnknownzFHSS 2.4 GHzzDSSS 2.4 GHzzIR Basebandz
OFDM 5 GHzHRDSSSERP)r   r#   r'   r7   r8   r9   r:   N)r{   r|   r}   r~   r   r   r`   r   rP   rN   r  r    s[        4D	%h$
 $
 	 	KKKrP   r  r  c                   B    e Zd ZdZ edd           edd          gZdS )LLTDAttributeSeesListz&LLTD Attribute - Sees List Working Setrs   r'   max_entriesr   Nr  r   rP   rN   r  r    s8        3D	%
=!$$KKKrP   r  iو  )r   )r&   r)   r"   c                   $    e Zd ZdZd Zd Zd ZdS )LargeTlvBuilderay  An object to build content fetched through LLTDQueryLargeTlv /
    LLTDQueryLargeTlvResp packets.

    Usable with a PacketList() object:
    >>> p = LargeTlvBuilder()
    >>> p.parse(rdpcap('capture_file.cap'))

    Or during a network capture:
    >>> p = LargeTlvBuilder()
    >>> sniff(filter="ether proto 0x88d9", prn=p.parse)

    To get the result, use .get_data()

    c                 "    i | _         i | _        d S rK   )types_offsetsdatarj   s    rN   __init__zLargeTlvBuilder.__init__#  s    			rP   c           	      z   t          |t                    st          |          }|t                   D ]}t          |v rDd|j        |j        |j        fz  }|t                   j        |t                   j        f| j	        |<   Pt          |v r-	 d|j        |j        |j        fz  }| j	        |         \  }}n# t          $ r Y w xY wt          |||t                   j        z             }|j        d|j        dt          j        d         j                            ||          d}| j                            |t'          d                    }t          |          }||j        k     r.|                    t'          dd|j        |z
  z                       t'          d|t                   j                  ||<   dS )	ztUpdate the builder using the provided `plist`. `plist` can
        be either a Packet() or a PacketList().

        z%s:%s:%dz > z [r   ]rQ       N)r^   r   r!   r   rT   rU   rZ   r   r   r  r   KeyErrorslicers   r`   i2srn   r  
setdefaultr   stopextendr   )	rd   plistrM   keycontentr   locr  datalens	            rN   parsezLargeTlvBuilder.parse'  s   
 %,, 	&u%%E; 	I 	IC C'' CL#,#HH+./@+A+F+./@+A+H+J"3''&#--$clCG'LLC&*&8&=OGVV   HFFS1F-G-K$KLLLLL#,,,%1!48<<WgNNNN y++Cs<<d))SX%%KKc7ch6H+I J JKKK!#s+@'A'GHHS	)	I 	Is   'B55
CCc                 H    d | j                                         D             S )zReturns a dictionary object, keys are strings "source >
        destincation [content type]", and values are the content
        fetched, also as a string.

        c                 T    i | ]%\  }}|d                      d |D                       &S )r   c              3   4   K   | ]}t          |          V  d S rK   )chr)r   bytes     rN   r   z6LargeTlvBuilder.get_data.<locals>.<dictcomp>.<genexpr>J  s(      884SYY888888rP   )r   )r   r%  r  s      rN   
<dictcomp>z,LargeTlvBuilder.get_data.<locals>.<dictcomp>J  sI     4 4 4C RWW88488888 4 4 4rP   )r  itemsrj   s    rN   get_datazLargeTlvBuilder.get_dataD  s/    4 4!%!2!24 4 4 	4rP   N)r{   r|   r}   __doc__r  r)  r1  r   rP   rN   r  r    sN           I I I:4 4 4 4 4rP   r  N)Cr2  r   scapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   scapy.packetr   r   r   scapy.plistr   scapy.layers.l2r   scapy.layers.inetr   scapy.layers.inet6r   
scapy.datar   scapy.compatr   r   r!   rw   rr   r   r   r   r   r   r   r   r   r   r   ru   r   r   r  r  r  r  r  r  r   r  r  r  r  objectr  r   rP   rN   <module>r<     s         O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 6 5 5 5 5 5 5 5 5 5 " " " " " " ! ! ! ! ! ! % % % % % % ' ' ' ' ' '             ! ! ! ! ! ! ! !m m m m m6 m m m`       A A A A A6 A A A    V   > > > > >v > > >    V   : : : : :F : : :0@ @ @ @ @ @ @ @&    F   .$. $. $. $. $.F $. $. $.N    6 q!!    }   "!
 q!!E E E E E- E E "!E q!!    =   "! q!!Z Z Z Z Z- Z Z "!Zz q!!    }   "! q!!    }   "! q!!       "! r""    }   #" r""    ]   #" r2r**    M   +* r""	- 	- 	- 	- 	-} 	- 	- #"	- r""    m   #" r""    m   #" r""    }   #"  r""    M   #" E4f % % % % D,A 2 2 2 2 D,A 2 2 2 2 D)Q / / / / D)Q / / / / D(A . . . . D-Q 3 3 3 3 D#R 8 8 8 8 D'Q < < < < I} % % % M= ) ) ) M7 + + + + NG $ $ $ NG $ $ $84 84 84 84 84f 84 84 84 84 84rP   