a
    kÄ#dZ  ã                   @   s(  d Z ddlmZ ddlmZ ddlZddlmZmZ ddl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 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eeeedœZG dd„ deƒZ eee ddd� ej!e"eƒ ƒfdd„Z#dS )zû
    DTP Scapy Extension
    ~~~~~~~~~~~~~~~~~~~

    :version: 2008-12-22
    :author: Jochen Bartl <lobo@c3a.de>

    :Thanks:

    - TLV code derived from the CDP implementation of scapy. (Thanks to Nicolas Bareil and Arnaud Ebalard)  # noqa: E501
é    )Úabsolute_import)Úprint_functionN)ÚPacketÚbind_layers)Ú	ByteFieldÚFieldLenFieldÚMACFieldÚPacketListFieldÚ
ShortFieldÚStrLenFieldÚXShortField)ÚSNAPÚDot3ÚLLC)Úsendp)Úconf)ÚRandMACc                   @   sR   e Zd ZdZeddƒedddd„ d�ed	d
dd„ d�gZeddd„ƒZ	dd„ Z
dS )ÚDtpGenericTlvzDTP Generic TLVÚtypeé   ÚlengthNc                 C   s
   | j d S ©Né   )Úvalue©Úpkt© r   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/contrib/dtp.pyÚ<lambda>$   ó    zDtpGenericTlv.<lambda>)Z	length_ofr   Ú c                 C   s
   | j d S r   ©r   r   r   r   r   r   %   r   ©Zlength_fromc                 O   s8   |r4t |ƒdkr4t d|d d… ¡d }t |d¡} | S )Né   z!Hr   r   )ÚlenÚstructÚunpackÚ_DTP_TLV_CLSÚget)ÚclsZ_pktÚargsZkargsÚtr   r   r   Údispatch_hook(   s    zDtpGenericTlv.dispatch_hookc                 C   s   t jS )N)r   Zpadding_layer)ÚselfÚpr   r   r   Úguess_payload_class/   s    z!DtpGenericTlv.guess_payload_class)N)Ú__name__Ú
__module__Ú__qualname__Únamer   r   r   Úfields_descÚclassmethodr,   r/   r   r   r   r   r   !   s   þr   c                   @   s>   e Zd ZdZeddƒeddddd„ d	�edd
dd„ d�gZdS )Ú	DTPDomainz
DTP Domainr   r   r   NÚdomainc                 C   s   |d S r   r   ©r   Úxr   r   r   r   6   r   zDTPDomain.<lambda>©Úadjustó    c                 C   s
   | j d S r   r!   r   r   r   r   r   7   r   r"   ©r0   r1   r2   r3   r
   r   r   r4   r   r   r   r   r6   3   s
   þr6   c                   @   s>   e Zd ZdZeddƒeddddd„ d	�edd
dd„ d�gZdS )Ú	DTPStatusz
DTP Statusr   r#   r   NÚstatusc                 C   s   |d S r   r   r8   r   r   r   r   >   r   zDTPStatus.<lambda>r:   ó   c                 C   s
   | j d S r   r!   r   r   r   r   r   ?   r   r"   r=   r   r   r   r   r>   ;   s
   þr>   c                   @   s>   e Zd ZdZeddƒeddddd„ d	�edd
dd„ d�gZdS )ÚDTPTypezDTP Typer   é   r   NZdtptypec                 C   s   |d S r   r   r8   r   r   r   r   F   r   zDTPType.<lambda>r:   ó   ¥c                 C   s
   | j d S r   r!   r   r   r   r   r   G   r   r"   r=   r   r   r   r   rA   C   s
   þrA   c                   @   s,   e Zd ZdZeddƒeddƒeddƒgZdS )ÚDTPNeighborzDTP Neighborr   r   r$   é
   ÚneighborN)r0   r1   r2   r3   r
   r   r4   r   r   r   r   rD   K   s
   ýrD   )r   r#   rB   r   c                   @   s&   e Zd Zd Zeddƒedg eƒgZdS )ÚDTPÚverr   ÚtlvlistN)r0   r1   r2   r3   r   r	   r   r4   r   r   r   r   rG   \   s   
ÿrG   i   é   )ÚcodeZOUIc                 C   sV   t d|  ƒ t|dd�tƒ  }|tƒ  }|ttƒ tƒ tƒ t|d�gd� }t	|ƒ d S )Nz+Trying to negotiate a trunk on interface %sz01:00:0c:cc:cc:cc)ÚsrcÚdst)rF   )rI   )
Úprintr   r   r   rG   r6   r>   rA   rD   r   )ÚifaceZmymacr.   r   r   r   Únegotiate_trunke   s
    
"rP   )$Ú__doc__Ú
__future__r   r   r%   Zscapy.packetr   r   Zscapy.fieldsr   r   r   r	   r
   r   r   Zscapy.layers.l2r   r   r   Zscapy.sendrecvr   Zscapy.configr   Zscapy.volatiler   r   r6   r>   rA   rD   r'   rG   rO   ÚstrrP   r   r   r   r   Ú<module>   s,   $
ü