a
    kÄ#düe  ã                   @   sÎ  d Z ddlm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&  m'Z' ddl(m)Z)m*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ƒZ0G dd„ deƒZ1G dd„ deƒZ2G dd„ deƒZ3G dd „ d eƒZ4i Z5d!d"„ Z6e6dƒG d#d$„ d$e4ƒƒZ7e6d%ƒG d&d'„ d'e4ƒƒZ8e6d(ƒG d)d*„ d*e4ƒƒZ9e6d+ƒG d,d-„ d-e4ƒƒZ:e6d.ƒG d/d0„ d0e4ƒƒZ;e6d1ƒG d2d3„ d3e4ƒƒZ<e6d4ƒG d5d6„ d6e4ƒƒZ=e6d7ƒG d8d9„ d9e4ƒƒZ>e6d:ƒG d;d<„ d<e4ƒƒZ?e6d=d>d?ƒG d@dA„ dAe4ƒƒZ@e6dBƒG dCdD„ dDe4ƒƒZAe6dEƒG dFdG„ dGe4ƒƒZBe6dHƒG dIdJ„ dJe4ƒƒZCe6dKƒG dLdM„ dMe4ƒƒZDe6dNƒG dOdP„ dPe4ƒƒZEeee+dQdR� ee+e-dddS� ee+e-d%ddS� ee+e,dd%dS� ee+e,d%d%dS� ee+e/dd(dS� ee+e1dd.dS� ee+e2ddTdS� ee+e3dd:dS� ee,e4ƒ ee4e4ƒ ee4eddR� ee.eƒ ee0eƒ G dUdV„ dVeFƒZGdS )WzGLLTD Protocol

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

é    )Úabsolute_import)Ú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_ANYN)ÚorbÚchbc                   @   sì   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*„ d+d,�ed-d.ƒed/d.ƒe	e
d0dƒd1d*„ ƒe	e
d2dƒd3d*„ ƒgZd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd.S )<ÚLLTD)r   r   )r   é   ))é   r"   )r   é   Úversionr"   Útosr   zTopology discoveryzQuick discoveryzQoS diagnostics)r   r"   é   ÚreservedÚfunctionZDiscoverZHelloZEmitÚTrainÚProbeZAckZQueryZ	QueryRespZResetZChargeZFlatZQueryLargeTlvZQueryLargeTlvResp)r   r"   r&   é   é   é   é   é   é   é	   é
   r!   r#   )r   r"   r0   ZQosInitializeSinkZQosReadyZQosProbeZQosQueryZQosQueryRespZQosResetZQosErrorZQosAckZQosCounterSnapshotZQosCounterResultZQosCounterLease)r   r"   r&   r+   r,   r-   r.   r/   r0   r1   r2   c                 C   s   | j S ©N)r%   ©Úpkt© r6   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/lltd.pyÚ<lambda>S   ó    zLLTD.<lambda>ÚB)Z
depends_onÚfmtÚreal_dstNÚreal_srcÚxidc                 C   s
   | j dv S ©N)r   r0   ©r(   r4   r6   r6   r7   r8   W   r9   Úseqc                 C   s
   | j dvS r?   r@   r4   r6   r6   r7   r8   Y   r9   c                 C   sš   | j d u s| jd u r’t| jtƒr’| j}| j d u r\|d d… |jd  ||j¡ |dd …  }| jd u r’|d d… |jd  ||j¡ |dd …  }|| S )Nr,   r   r2   r"   é   )	r<   r=   Ú
isinstanceÚ
underlayerr   Úfields_descZi2mÚdstÚsrc)Úselfr5   ÚpayÚethr6   r6   r7   Ú
post_build\   s    
ÿ

ÿ

ÿzLLTD.post_buildc                 C   s&   t | jtƒr| j d¡S |  d¡S d S )Nz/LLTD %src% > %dst% %LLTD.tos% - %LLTD.function%zLLTD %tos% - %function%)rC   rD   r   Úsprintf©rH   r6   r6   r7   Ú	mysummaryh   s
    ÿzLLTD.mysummaryc                 C   s(   | j | j }}d| j ||f||f¡ S )Ns   %c%c)r%   r(   Úanswer_hashretÚget)rH   r%   r(   r6   r6   r7   Úhashretp   s    ÿzLLTD.hashretc                 C   sä   t |tƒsdS | jdkr | jdkrtt | jtƒrtt| t jƒdkrt|jdkor|jdkort|v or|t j	| t jd kS | jdkrà|jdkoœ|jdkoœ|j
| j
kS n@| jdkrà| 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!   )rC   r    r%   r(   ÚpayloadÚLLTDDiscoverÚlenÚstations_listÚLLTDAttributeHostIDÚmacrA   Ú	LLTDHellor=   Úcurrent_mapper_address)rH   Úotherr6   r6   r7   Úanswersu   s2    

ÿ
ÿþÿý

ÿ

ÿzLLTD.answers)Ú__name__Ú
__module__Ú__qualname__ÚnamerO   r   r   r   r   r   r   rE   rK   rN   rQ   r[   r6   r6   r6   r7   r    !   st   üýóýõë"Þ#
ÿ
ÿÑ3r    c                   @   s0   e Zd ZdZdZeddƒedeƒedeƒgZdS )rX   zLLTD - HelloFÚ
gen_numberr   rY   Zapparent_mapper_addressN)	r\   r]   r^   r_   Úshow_summaryr   r   r   rE   r6   r6   r6   r7   rX   ‘   s   ýrX   c                   @   sJ   e Zd ZdZeddƒeddddd�edg ed	eƒd
d„ d�gZ	dd„ Z
dS )rS   zLLTD - Discoverr`   r   Ústations_countNrU   ÚH©Zcount_ofr;   Ú c                 C   s   | j S r3   )rb   r4   r6   r6   r7   r8   ¢   r9   zLLTDDiscover.<lambda>©Z
count_fromc                 C   s   | j r|  d¡ndtgfS )NzStations: %stations_list%z
No station)rU   rL   r    rM   r6   r6   r7   rN   ¥   s    ÿÿzLLTDDiscover.mysummary)r\   r]   r^   r_   r   r   r   r   r   rE   rN   r6   r6   r6   r7   rS   ›   s   ÿÿürS   c                   @   s<   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"   ÚpauserG   NrF   )	r\   r]   r^   r_   r   r   r   r   rE   r6   r6   r6   r7   rg   ª   s   ürg   c                   @   s<   e Zd ZdZeddddd�edg edd„ d	�gZd
d„ ZdS )ÚLLTDEmitzLLTD - EmitÚdescs_countNÚ
descs_listrc   rd   c                 C   s   | j S r3   ©rl   r4   r6   r6   r7   r8   º   r9   zLLTDEmit.<lambda>rf   c                 C   s   d  dd„ | jD ƒ¡tgfS )Nz, c                 s   s   | ]}|  d ¡V  qdS )z%src% > %dst%N)rL   )Ú.0Údescr6   r6   r7   Ú	<genexpr>¾   s   ÿz%LLTDEmit.mysummary.<locals>.<genexpr>)Újoinrm   r    rM   r6   r6   r7   rN   ½   s
    
ÿÿzLLTDEmit.mysummary)	r\   r]   r^   r_   r   r   rg   rE   rN   r6   r6   r6   r7   rk   ´   s   ÿÿýrk   c                   @   s<   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 Descrh   r   r*   zARP or ICMPv6ri   r=   Z	ether_srcZ	ether_dstN)r\   r]   r^   r_   r	   r   r   rE   r6   r6   r6   r7   rs   Â   s   ürs   c                   @   sL   e Zd ZdZeddddƒedddƒed	g ed
d„ d�gZdd„ Z	dd„ Z
dS )ÚLLTDQueryRespzLLTD - Query ResponseÚflagsr   r&   ZMErl   Né   rm   c                 C   s   | j S r3   rn   r4   r6   r6   r7   r8   Ò   r9   zLLTDQueryResp.<lambda>rf   c                 C   sT   | j d u rLt|d ƒd@ }t| jƒ}t||d?  ƒt|d ƒ |dd …  }|| S ©Nr   éÀ   r0   é   r&   )rl   r   rT   rm   r   )rH   r5   rI   ru   Úcountr6   r6   r7   rK   Õ   s
    

(zLLTDQueryResp.post_buildc                 C   s(   |   d| j| jdkrdndf ¡tgfS )Nz%d response%sr"   Úsre   )rL   rl   r    rM   r6   r6   r7   rN   Þ   s    þþzLLTDQueryResp.mysummary)r\   r]   r^   r_   r   r   r   rs   rE   rK   rN   r6   r6   r6   r7   rt   Ì   s   
ÿý	rt   c                   @   s>   e Zd ZdZedddddddd	d
dœƒeddƒgZdd„ ZdS )ÚLLTDQueryLargeTlvzLLTD - Query Large Tlvrh   rv   z
Icon imagezFriendly NamezHardware IDzAP Association TableúDetailed Icon ImagezComponent TablezRepeater AP Table)rv   é   é   é   é   é   é   Úoffsetr   c                 C   s   |   d¡tgfS )Nz%type% (offset %offset%))rL   r    rM   r6   r6   r7   rN   ó   s    zLLTDQueryLargeTlv.mysummaryN)r\   r]   r^   r_   r   r
   rE   rN   r6   r6   r6   r7   r|   ä   s   ù	ör|   c                   @   sJ   e Zd ZdZeddddƒedddƒed	d
dd„ d�gZdd„ Zdd„ Z	dS )ÚLLTDQueryLargeTlvRespzLLTD - Query Large Tlv Responseru   r   r&   ZRMrT   Nrv   Úvaluere   c                 C   s   | j S r3   ©rT   r4   r6   r6   r7   r8   ü   r9   zLLTDQueryLargeTlvResp.<lambda>©Zlength_fromc                 C   sT   | j d u rLt|d ƒd@ }t | jƒ}t||d?  ƒt|d ƒ |dd …  }|| S rw   )rT   r   r†   r   )rH   r5   rI   ru   Úlengthr6   r6   r7   rK   ÿ   s
    

(z LLTDQueryLargeTlvResp.post_buildc                 C   s"   |   d| jd@ sdnd ¡tgfS )Nz%%len%% bytes%sr&   z (last)re   )rL   ru   r    rM   r6   r6   r7   rN     s
    ÿþzLLTDQueryLargeTlvResp.mysummary)
r\   r]   r^   r_   r   r   r   rE   rK   rN   r6   r6   r6   r7   r…   ÷   s   
ý	r…   c                   @   sp   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d�edddd„ d�gZ	e
ddd„ƒZdS ) ÚLLTDAttributezLLTD AttributeFrh   r   zEnd Of PropertyzHost IDZ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&   r+   r/   r1   r2   r#   rv   é   é   é   é   r�   rT   Nr†   r:   ©Ú	length_ofr;   re   c                 C   s   | j S r3   r‡   r4   r6   r6   r7   r8   %  r9   zLLTDAttribute.<lambda>rˆ   c                 O   sP   |rt |d ƒ}n2d|v r@|d }t|tjƒrD| jd j| }n| S t || ¡S )Nr   rh   )r   rC   ÚsixÚstring_typesrE   Zs2iÚSPECIFIC_CLASSESrP   )ÚclsZ_pktÚ_ZkargsÚcmdr6   r6   r7   Údispatch_hook(  s    zLLTDAttribute.dispatch_hook)N)r\   r]   r^   r_   Zshow_indentra   r   r   r   rE   Úclassmethodr—   r6   r6   r6   r7   rŠ     s0   òîrŠ   c                     s   ‡ fd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                    s<   ˆ D ]}| t |< qtjd  ¡ }ˆ d |_|g| j | _| S )Nr   )r“   rŠ   rE   ÚcopyÚdefault)r”   Z	attr_typeZtype_fld©Ú
attr_typesr6   r7   Ú	_registerI  s    

z0_register_lltd_specific_class.<locals>._registerr6   )rœ   r�   r6   r›   r7   Ú_register_lltd_specific_class8  s    rž   c                   @   s   e Zd ZdZg ZdS )ÚLLTDAttributeEOPz LLTD Attribute - End Of PropertyN)r\   r]   r^   r_   rE   r6   r6   r6   r7   rŸ   S  s   rŸ   r"   c                   @   s,   e Zd ZdZeddƒedeƒgZdd„ ZdS )rV   zLLTD Attribute - Host IDrT   r.   rW   c                 C   s   d| j  ttgfS )NzID: %s)rW   r    ÚLLTDAttributeMachineNamerM   r6   r6   r7   rN   a  s    zLLTDAttributeHostID.mysummaryN)	r\   r]   r^   r_   r   r   r   rE   rN   r6   r6   r6   r7   rV   Y  s
   þrV   r&   c                   @   sN   e Zd ZdZedddddd„ d�ed	d
ddƒedd
dƒedddd„ d�gZdS )ÚLLTDAttributeCharacteristicsz LLTD Attribute - CharacteristicsrT   NÚ	reserved2r:   c                 C   s   |d S ©Nr&   r6   )r•   Úxr6   r6   r7   r8   m  r9   z%LLTDAttributeCharacteristics.<lambda>)r�   r;   Úadjustru   r   r-   ZPXFMLÚ	reserved1r!   re   c                 C   s
   | j d S r£   r‡   )r¤   r6   r6   r7   r8   p  r9   rˆ   )	r\   r]   r^   r_   r   r   r   r   rE   r6   r6   r6   r7   r¡   e  s   
ÿ
ør¡   r+   c                  @   s†  e Zd ZdZ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&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{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¡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Ç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í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�d�d�d�d�d�d�œƒgZ�dS (  ÚLLTDAttributePhysicalMediumz LLTD Attribute - Physical MediumrT   r,   Úmediumr.   rZ   Zregular1822Zhdh1822ZddnX25Z	rfc877x25ZethernetCsmacdZiso88023CsmacdZiso88024TokenBusZiso88025TokenRingZiso88026ManZstarLanZproteon10MbitZproteon80MbitZhyperchannelZfddiZlapbZsdlcZds1Úe1Z	basicISDNZprimaryISDNZpropPointToPointSerialZpppZsoftwareLoopbackZeonZethernet3MbitZnsipZslipZultraZds3ÚsipZ
frameRelayZrs232ÚparaZarcnetZ
arcnetPlusÚatmZmiox25ZsonetZx25pleZiso88022llcZ	localTalkZsmdsDxiZframeRelayServiceZv35ZhssiZhippiZmodemZaal5Z	sonetPathZsonetVTZsmdsIcipZpropVirtualZpropMultiplexorZ	ieee80212ZfibreChannelZhippiInterfaceZframeRelayInterconnectZ
aflane8023Z
aflane8025ZcctEmulZ	fastEtherZisdnZv11Zv36Z	g703at64kZ	g703at2mbZqllcZfastEtherFXZchannelZ	ieee80211Zibm370parChanZesconZdlswZisdnsZisdnuZlapdZipSwitchZrsrbZ
atmLogicalZds0Z	ds0BundleZbscÚasyncZcnrZiso88025DtrZeplrsZarapZpropCnlsZhostPadZtermPadZframeRelayMPIZx213ZadslZradslZsdslZvdslZiso88025CRFPIntZmyrinetZvoiceEMZvoiceFXOZvoiceFXSZ
voiceEncapZvoiceOverIpZatmDxiZatmFuniZatmImaZpppMultilinkBundleZ
ipOverCdlcZ
ipOverClawZstackToStackZvirtualIpAddressZmpcZ	ipOverAtmZiso88025FiberZtdlcZgigabitEthernetZhdlcZlapfZv37Zx25mlpZx25huntGroupZ
transpHdlcÚ
interleaveÚfastÚipZdocsCableMaclayerZdocsCableDownstreamZdocsCableUpstreamZa12MppSwitchZtunnelÚcoffeeZcesZatmSubInterfaceZl2vlanZl3ipvlanZ	l3ipxvlanZdigitalPowerlineZmediaMailOverIpZdtmZdcnZ	ipForwardZmsdslZieee1394zif-gsnZdvbRccMacLayerZdvbRccDownstreamZdvbRccUpstreamZ
atmVirtualZ
mplsTunnelZsrpZvoiceOverAtmZvoiceOverFrameRelayZidslZcompositeLinkZ
ss7SigLinkZpropWirelessP2PZ	frForwardZrfc1483ZusbZieee8023adLagZbgppolicyaccountingZfrf16MfrBundleZh323GatekeeperZ	h323ProxyZmplsZ	mfSigLinkZhdsl2ZshdslZds1FDLÚposZdvbAsiInZ	dvbAsiOutZplcZnfasZtr008Zgr303RDTZgr303IDTZisupZpropDocsWirelessMaclayerZpropDocsWirelessDownstreamZpropDocsWirelessUpstreamZ	hiperlan2ZpropBWAp2MpZsonetOverheadChannelZdigitalWrapperOverheadChannelZaal2ZradioMACZatmRadioZimtZmvlZreachDSLZfrDlciEndPtZatmVciEndPtZopticalChannelZopticalTransportZpropAtmZvoiceOverCableZ
infinibandZteLinkZq2931Z	virtualTgZsipTgZsipSigZdocsCableUpstreamChannelZeconetZpon155Zpon622ZbridgeZ	linegroupZ
voiceEMFGDZvoiceFGDEANAZvoiceDIDZmpegTransportZ	sixToFourZgtpZpdnEtherLoop1ZpdnEtherLoop2ZopticalChannelGroupZhomepnaZgfpZciscoISLvlanZactelisMetaLOOPZfcipLinkZrprZqamZlmpZcblVectaStarZdocsCableMCmtsDownstreamZadsl2ZmacSecControlledIFZmacSecUncontrolledIFZaviciOpticalEtherZatmbondZ
voiceFGDOSZmocaVersion1Zieee80216WMANZ	adsl2plusZdvbRcsMacLayerZdvbTdmZ
dvbRcsTdmaZx86LapsZwwanPPZwwanPP2ZvoiceEBSZifPwTypeZilanÚpipZaluELPZgponZvdsl2ZcapwapDot11ProfileZcapwapDot11BssZcapwapWtpVirtualRadioÚbitsZdocsCableUpstreamRfPortZcableDownstreamRfPortZvmwareVirtualNicZ
ieee802154ZotnOduZotnOtuZ	ifVfiTypeZg9981Zg9982Zg9983ZaluEponZ
aluEponOnuZaluEponPhysicalUniZaluEponLogicalLinkZaluGponPhysicalUniZvmwareNicTeamZdocsOfdmDownstreamZdocsOfdmaUpstreamZgfastZsdci(  r"   r&   r+   r,   r-   r.   r/   r0   r1   r2   r!   r#   é   rv   r‹   rB   r~   rŒ   r   r�   rŽ   r€   é   r�   é   r‚   é   rƒ   é   é   é   é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   é_   é`   éa   éb   éc   éd   ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   éq   ér   és   ét   éu   év   éw   éx   éy   éz   é{   é|   é}   é~   é   é€   é�   é‚   éƒ   é„   é…   é†   é‡   éˆ   é‰   éŠ   é‹   éŒ   é�   éŽ   é�   é�   é‘   é’   é“   é”   é•   é–   é—   é˜   é™   éš   é›   éœ   é�   éž   éŸ   é    é¡   é¢   é£   é¤   é¥   é¦   é§   é¨   é©   éª   é«   é¬   é­   é®   é¯   é°   é±   é²   é³   é´   éµ   é¶   é·   é¸   é¹   éº   é»   é¼   é½   é¾   é¿   rx   éÁ   éÂ   éÃ   éÄ   éÅ   éÆ   éÇ   éÈ   éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éÐ   éÑ   éÒ   éÓ   éÔ   éÕ   éÖ   é×   éØ   éÙ   éÚ   éÛ   éÜ   éÝ   éÞ   éß   éà   éá   éâ   éã   éä   éå   éæ   éç   éè   éé   éê   éë   éì   éí   éî   éï   éð   éñ   éò   éó   éô   éõ   éö   é÷   éø   éù   éú   éû   éü   éý   éþ   éÿ   ry   i  i  i  i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i  i  N)r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   r§   t  s4  € € ì
þr§   r/   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚLLTDAttributeIPv4AddresszLLTD Attribute - IPv4 AddressrT   r,   Zipv4z0.0.0.0N)r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   r›  ’  s   þr›  r0   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚLLTDAttributeIPv6AddresszLLTD Attribute - IPv6 AddressrT   rB   Zipv6z::N)r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   rœ  ›  s   þrœ  r1   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚLLTDAttribute80211MaxRatez LLTD Attribute - 802.11 Max RaterT   r&   Zrater   N©r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   r�  ¤  s   þr�  r2   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )Ú(LLTDAttributePerformanceCounterFrequencyz.LLTD Attribute - Performance Counter FrequencyrT   r0   Úfreqr   N)r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   rŸ  ­  s   þrŸ  r#   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚLLTDAttributeLinkSpeedzLLTD Attribute - Link SpeedrT   r,   Úspeedr   N)r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   r¡  ¶  s   þr¡  rv   r�   r‚   c                   @   s   e Zd ZdZeddƒgZdS )ÚLLTDAttributeLargeTLVzLLTD Attribute - Large TLVrT   r   N)r\   r]   r^   r_   r   rE   r6   r6   r6   r7   r£  ¿  s   ÿr£  r‹   c                   @   s:   e Zd ZdZeddddd�edddd	„ d
�gZdd„ ZdS )r    zLLTD Attribute - Machine NamerT   NÚhostnamer:   r�   re   c                 C   s   | j S r3   r‡   r4   r6   r6   r7   r8   Ì  r9   z!LLTDAttributeMachineName.<lambda>rˆ   c                 C   s   |   d| j ¡ttgfS )NzHostname: %r)rL   r¤  r    rV   rM   r6   r6   r7   rN   Ï  s    ÿz"LLTDAttributeMachineName.mysummary)r\   r]   r^   r_   r   r   rE   rN   r6   r6   r6   r7   r    Ç  s
   þr    rŒ   c                   @   s2   e Zd ZdZeddddd�edddd	„ d
�gZdS )ÚLLTDAttributeDeviceUUIDzLLTD Attribute - Device UUIDrT   NÚuuidr:   r�   s                   c                 C   s   | j S r3   r‡   r4   r6   r6   r7   r8   Ù  r9   z LLTDAttributeDeviceUUID.<lambda>rˆ   )r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   r¥  Ô  s   þr¥  r�   c                   @   s:   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 CharacteristicsrT   r,   ru   r   r+   ZEQPr¦   rµ   r¢   N)	r\   r]   r^   r_   r   r   r   r   rE   r6   r6   r6   r7   r§  Ý  s   
ür§  rŽ   c                   @   s6   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 MediumrT   r"   r¨   r   ÚUnknownzFHSS 2.4 GHzzDSSS 2.4 GHzzIR Basebandz
OFDM 5 GHzZHRDSSSZERP)r   r"   r&   r+   r,   r-   r.   N)r\   r]   r^   r_   r   r   rE   r6   r6   r6   r7   r¨  è  s   ùþr¨  r·   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )ÚLLTDAttributeSeesListz&LLTD Attribute - Sees List Working SetrT   r&   Zmax_entriesr   Nrž  r6   r6   r6   r7   rª  ù  s   þrª  iÙˆ  )rh   )r%   r(   r!   c                   @   s(   e Zd ZdZdd„ Zdd„ Zd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                 C   s   i | _ i | _d S r3   )Útypes_offsetsÚdatarM   r6   r6   r7   Ú__init__%  s    zLargeTlvBuilder.__init__c           	   	   C   s.  t |tƒst|ƒ}|t D �]}t|v rXd|j|j|jf }|t j|t jf| j	|< qt
|v rz&d|j|j|jf }| j	| \}}W n tyœ   Y qY n0 t|||t
 j ƒ}d|j|jtjd j ||¡f }| j |tdƒ¡}t|ƒ}||jk �r| tdd|j|  ƒ¡ td|t
 jƒ||< qdS )ztUpdate the builder using the provided `plist`. `plist` can
        be either a Packet() or a PacketList().

        z%s:%s:%dz%s > %s [%s]r   r:   ó    N)rC   r   r    r|   r<   r=   rA   rh   r„   r¬  r…   ÚKeyErrorÚslicerT   rE   Zi2srP   r­  Ú
setdefaultr   ÚstopÚextendr†   )	rH   Úplistr5   ÚkeyÚcontentr„   Úlocr­  Zdatalenr6   r6   r7   Úparse)  s0    
ÿ
þzLargeTlvBuilder.parsec                 C   s   dd„ t  | j¡D ƒS )z¥Returns a dictionary object, keys are strings "source >
        destincation [content type]", and values are the content
        fetched, also as a string.

        c                 S   s&   i | ]\}}|d   dd„ |D ƒ¡“qS )re   c                 s   s   | ]}t |ƒV  qd S r3   )Úchr)ro   Úbyter6   r6   r7   rq   L  r9   z6LargeTlvBuilder.get_data.<locals>.<dictcomp>.<genexpr>)rr   )ro   r¶  r­  r6   r6   r7   Ú
<dictcomp>L  s   ÿz,LargeTlvBuilder.get_data.<locals>.<dictcomp>)r‘   Ú	iteritemsr­  rM   r6   r6   r7   Úget_dataF  s    
ÿzLargeTlvBuilder.get_dataN)r\   r]   r^   Ú__doc__r®  r¹  r¾  r6   r6   r6   r7   r«    s   r«  )Hr¿  Ú
__future__r   r   Zscapy.fieldsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zscapy.packetr   r   r   Zscapy.plistr   Zscapy.layers.l2r   Zscapy.layers.inetr   Zscapy.layers.inet6r   Z
scapy.datar   Zscapy.libs.sixZlibsr‘   Zscapy.compatr   r   r    rX   rS   rg   rk   rs   rt   r|   r…   rŠ   r“   rž   rŸ   rV   r¡   r§   r›  rœ  r�  rŸ  r¡  r£  r    r¥  r§  r¨  rª  Úobjectr«  r6   r6   r6   r7   Ú<module>   sŒ   Pp


'  





