
    h                     |   d 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mZmZmZmZ ddlmZ ddlmZ ddlmZ ddd	d
ddZddddddddddd
Z G d de          Z G d de          Zddddd Z G d! d"e          Z G d# d$e          Z eeed%&           ed'k    rdd(lmZ  e e             d$)           d*S d*S )+aa  
    VTP Scapy Extension
    ~~~~~~~~~~~~~~~~~~~~~

    :version:   2009-02-15
    :copyright: 2009 by Jochen Bartl
    :e-mail:    lobo@c3a.de / jochen.bartl@gmail.com
    :license:   GPL v2

        This program is free software; you can redistribute it and/or
        modify it under the terms of the GNU General Public License
        as published by the Free Software Foundation; either version 2
        of the License, or (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

    :TODO:

        - Join messages
        - RE MD5 hash calculation
        - Have a closer look at 8 byte padding in summary adv:

            "debug sw-vlan vtp packets" says the TLV length is invalid,
            when I change the values:

            ``b'\x00\x00\x00\x01\x06\x01\x00\x02'``

            * \x00\x00 ?
            * \x00\x01 tlvtype?
            * \x06 length?
            * \x00\x02 value?

        - h2i function for VTPTimeStampField

    :References:

        - | Understanding VLAN Trunk Protocol (VTP)
          | http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml  # noqa: E501
    )Packetbind_layers)ByteEnumField	ByteFieldConditionalFieldFieldLenFieldIPFieldPacketListField
ShortFieldSignedIntFieldStrFixedLenFieldStrLenField	XIntField)SNAP)chb)confEthernetFDDITrCRFzFDDI-netTrBRF)               zSource-Routing Ring NumberzSource-Routing Bridge NumberzSpanning-Tree Protocol TypezParent VLANzTranslationally Bridged VLANsPruningzBridge TypezMax ARE Hop CountzMax STE Hop CountzBackup CRF Mode)
r   r   r   r   r            	   
   c                   f    e Zd ZdZ edde           edd           eddd           gZd	 Z	dS )
VTPVlanInfoTlvzVTP VLAN Info TLVtyper   lengthvalueNc                     | j         dz   S Nr   )r%   pkts    U/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/scapy/contrib/vtp.py<lambda>zVTPVlanInfoTlv.<lambda>V   s    3:>     length_fromc                     t           j        S Nr   padding_layerselfps     r+   guess_payload_classz"VTPVlanInfoTlv.guess_payload_classY       !!r-   )
__name__
__module____qualname__namer   _VTP_VLANINFO_TLV_TYPEr   r   fields_descr7    r-   r+   r#   r#   Q   sh        Dfa!788	(AGT/I/IJJJK" " " " "r-   r#   c                      e Zd ZdZ edd           eddddd           ed	d
e           edddd           edd
           edd           e	dd           e
ddd            e edg ed           d           g	Zd Zd ZdS )VTPVlanInfozVTP VLAN InfolenNstatusr   active	suspended)r   r   r$   r   vlannamelenvlannameBvlanidmtui  
dot10indexdefaultc                 "    d| j         dz   dz  z  S )Nr   r   )rF   r)   s    r+   r,   zVTPVlanInfo.<lambda>h   s    A#/A2E!1K,L r-   r.   tlvlistc                 8    | j         dz
  d| j        dz   dz  z  z
  S )N   r   r   )rB   rF   r)   s    r+   r,   zVTPVlanInfo.<lambda>l   s$    "coPQ>QVW=W8X(Y r-   c                     | j         dvS )N)r   r   )r$   r)   s    r+   r,   zVTPVlanInfo.<lambda>n   s    sxv- r-   c                     dt          | j                  dz   dz  z  }| j         "|dz   }t          |dz            |dd          z   }|t          | j                  z
  }|dk    r|d|z  z  }||z  }|S )Nr   r   rP      r   r       )rB   rG   r   )r5   r6   payrF   tmp_lens        r+   
post_buildzVTPVlanInfo.post_buildr   s    C..2q898!B&GGdN##ae+A DM 2 22a<<7""A	Sr-   c                     t           j        S r1   r2   r4   s     r+   r7   zVTPVlanInfo.guess_payload_class   r8   r-   )r9   r:   r;   r<   r   r   _VTP_VLAN_TYPEr   r   r   r   r   r
   r#   r>   rW   r7   r?   r-   r+   rA   rA   ]   s       D	%hxK#@#@AAfa00mT:s;;
8Q
5$	,%%J	 L L	N 	N 	NO2~YY   .-	
 	
K&   " " " " "r-   rA   zSummary AdvertisementzSubset AdvertisementszAdvertisement RequestJoin)r   r   r   r   c                       e Zd Zd Zd ZdS )VTPTimeStampFieldc                 4    t          j        | ||d           d S )NrP   )r   __init__)r5   r<   rL   s      r+   r^   zVTPTimeStampField.__init__   s    !$gr:::::r-   c                     |d d         d|dd         d|dd         d|dd         d|dd         d|dd	         S )
Nr   -r   r    r   :r!   rP   r?   )r5   r*   xs      r+   i2reprzVTPTimeStampField.i2repr   s^    &'eeeQqsVVVQqsVVVQqsVVVQqtWWWaPRSUPUhhWWr-   N)r9   r:   r;   r^   rd   r?   r-   r+   r\   r\      s7        ; ; ;X X X X Xr-   r\   c                      e Zd Zd Z edd           edde           e edd          d            e edd          d            e ed	d
          d            edd           eddd           e e	dd
          d            e e
dd          d            e edd          d            e eddd          d            e edg e          d            e edd
          d            gZd! ZdS )"VTPverr   coder   	followersc                     | j         dk    S r(   rh   r)   s    r+   r,   zVTP.<lambda>       CHM r-   seqc                     | j         dk    S Nr   rk   r)   s    r+   r,   zVTP.<lambda>   rl   r-   reservedr   c                     | j         dk    S Nr   rk   r)   s    r+   r,   zVTP.<lambda>   rl   r-   
domnamelenNdomname
manbearpig    revc                 .    | j         dk    p
| j         dk    S )Nr   r   rk   r)   s    r+   r,   zVTP.<lambda>   s    CHM %'Q r-   uidz192.168.0.1c                     | j         dk    S r(   rk   r)   s    r+   r,   zVTP.<lambda>   rl   r-   	timestamp930301000000c                     | j         dk    S r(   rk   r)   s    r+   r,   zVTP.<lambda>   rl   r-   md5s                      c                     | j         dk    S r(   rk   r)   s    r+   r,   zVTP.<lambda>   rl   r-   vlaninfoc                     | j         dk    S ro   rk   r)   s    r+   r,   zVTP.<lambda>   s    A r-   
startvaluec                     | j         dk    S rr   rk   r)   s    r+   r,   zVTP.<lambda>   rl   r-   c                     | j         Ot          | j                            d                    }|d d         t	          |dz            z   |dd          z   }||z  }|S )NrT   r   rS   r   )rs   rB   rt   stripr   )r5   r6   rU   rs   s       r+   rW   zVTP.post_build   sa    ?"T\//8899J"1"J-...1226A	Sr-   )r9   r:   r;   r<   r   r   
_VTP_Typesr   r   r   r	   r\   r
   rA   r   r>   rW   r?   r-   r+   rf   rf      s       D	%fa,,;2211	3 	35!,,11	3 	3:q1111	3 	3	,%%L"55q11' '	( 	( 	6611	3 	3**;GG11	3 	3))%rBB11	3 	3OJK88%%	' 	' 	L!4411	3 	31K8    r-   rf   i   rk   __main__)interact)mydictmybannerN)!__doc__scapy.packetr   r   scapy.fieldsr   r   r   r   r	   r
   r   r   r   r   r   scapy.layers.l2r   scapy.compatr   scapy.configr   rY   r=   r#   rA   r   r\   rf   r9   
scapy.mainr   globalsr?   r-   r+   <module>r      sZ  ) )V - , , , , , , ,- - - - - - - - - - - - - - - - - - - - - - - - - - !                         '
(
'

)




  	" 	" 	" 	" 	"V 	" 	" 	"&" &" &" &" &"& &" &" &"T 	 
X X X X X( X X X% % % % %& % % %P D#F # # # #z######HGGII...... r-   