o
    àý°j5  ã                   @   sÚ  d dl mZ d dlZd dlmZmZ d dlmZ dZG dd„ dƒZ	G dd	„ d	eƒZ
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dƒ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ƒ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 d0d1„ d1eƒZG d2d3„ d3eƒZG d4d5„ d5eƒZ G d6d7„ d7eƒZ!G d8d9„ d9eƒZ"G d:d;„ d;eƒZ#G d<d=„ d=eƒZ$G d>d?„ d?ƒZ%dS )@é    ©ÚunpackN)ÚHeaderÚarray_tobytes)ÚLOGé   c                   @   s<   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdS )ÚCDPTypesé   é   é   r   é   é   é   é   é   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚDeviceID_TypeÚAddress_TypeÚPortID_TypeÚCapabilities_TypeÚSoftVersion_TypeÚPlatform_TypeÚIPPrefix_TypeÚProtocolHello_TypeÚMTU_TypeÚSystemName_TypeÚSystemObjectId_TypeÚSnmpLocation© r#   r#   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/cdp.pyr      s    r   c                   @   sf   e Zd ZdZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCDPi    é   Nc                 C   s.   t  | d¡ |r|  |¡ |  |¡| _d S d S ©Nr   )r   Ú__init__Úload_headerÚ_getElementsÚ	_elements©ÚselfÚaBufferr#   r#   r$   r(   .   s
   
þzCDP.__init__c                 C   s@   |dd … }g }|rt  |¡}| |¡ || ¡ d … }|s
|S ©Nr   )ÚCDPElementFactoryÚcreateÚappendÚ
get_length)r-   r.   ÚbuffÚlÚelemr#   r#   r$   r*   4   s   

ýzCDP._getElementsc                 C   s   dS r'   r#   ©r-   r#   r#   r$   Úget_header_size>   s   zCDP.get_header_sizec                 C   ó
   |   d¡S )Nr   ©Úget_byter7   r#   r#   r$   Úget_versionA   ó   
zCDP.get_versionc                 C   r9   ©Nr	   r:   r7   r#   r#   r$   Úget_ttlD   r=   zCDP.get_ttlc                 C   r9   ©Nr
   ©Úget_wordr7   r#   r#   r$   Úget_checksumG   r=   zCDP.get_checksumc                 C   r9   r/   rA   r7   r#   r#   r$   Úget_typeJ   r=   zCDP.get_typec                 C   r9   )Nr   rA   r7   r#   r#   r$   Ú
get_lenghtM   r=   zCDP.get_lenghtc                 C   ó   | j S ©N)r+   r7   r#   r#   r$   ÚgetElementsP   ó   zCDP.getElementsc                 C   s8   d}| j D ]}|dt| ¡ ƒ d t|ƒ d 7 }q|S )NzCDP Details:
z** Type:ú Ú
)r+   ÚstrrD   )r-   Útmp_strÚelementr#   r#   r$   Ú__str__T   s   
&zCDP.__str__rG   )r   r   r   ÚTypeÚOUIr(   r*   r8   r<   r?   rC   rD   rE   rH   rO   r#   r#   r#   r$   r%   )   s    

r%   c                 C   ó   t d| ||d … ƒd S )Nz!Br	   r   r   ©ÚbufferÚoffsetr#   r#   r$   r;   [   ó   r;   c                 C   rR   )Nú!hr
   r   r   rS   r#   r#   r$   rB   ^   rV   rB   c                 C   rR   )Nz!Ir   r   r   rS   r#   r#   r$   Úget_longa   rV   rX   c                 C   s   | ||| … S rG   r#   )rT   rU   Úbytesr#   r#   r$   Ú	get_bytesd   s   rZ   c                 C   s0   t d| ƒ}d}|D ]}|d| 7 }q	|dd… S )Nz!BBBBBBÚ z%02x:r   éÿÿÿÿr   )Ú	mac_bytesrY   ÚsÚbyter#   r#   r$   Úmac_to_stringg   s
   
r`   c                   @   sD   e Zd Zddd„Zedd„ ƒZdd„ Zdd	„ Zd
d„ Zddd„Z	dS )Ú
CDPElementNc                 C   s8   t  | d¡ |rt |¡| _|  |d | j… ¡ d S d S r'   )r   r(   ra   Ú
Get_lengthÚ_lengthr)   r,   r#   r#   r$   r(   r   s
   þzCDPElement.__init__c                 C   s   t d|dd… ƒd S )NrW   r
   r   r   r   )Úclsr.   r#   r#   r$   rb   x   s   zCDPElement.Get_lengthc                 C   s
   | j  d S rG   )rc   r7   r#   r#   r$   r8   |   r=   zCDPElement.get_header_sizec                 C   r9   r@   rA   r7   r#   r#   r$   r3      r=   zCDPElement.get_lengthc                 C   s   t |  ¡ ƒd|  ¡ … S r/   )r   rZ   r3   r7   r#   r#   r$   Úget_data‚   s   zCDPElement.get_datar   c                 C   s&   |st |  ¡ ƒ||t … }t |¡S rG   )r   rZ   ÚIP_ADDRESS_LENGTHÚsocketÚ	inet_ntoa)r-   rU   Úipr#   r#   r$   Úget_ip_address…   s   
zCDPElement.get_ip_addressrG   )r   N)
r   r   r   r(   Úclassmethodrb   r8   r3   re   rj   r#   r#   r#   r$   ra   p   s    

ra   c                   @   ó(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú	CDPDevicer	   c                 C   ó   t jS rG   )rm   rP   r7   r#   r#   r$   rD   �   rI   zCDPDevice.get_typec                 C   ó
   t  | ¡S rG   ©ra   re   r7   r#   r#   r$   Úget_device_id�   r=   zCDPDevice.get_device_idc                 C   ó   d|   ¡  S )NzDevice:)rq   r7   r#   r#   r$   rO   “   ó   zCDPDevice.__str__N)r   r   r   rP   rD   rq   rO   r#   r#   r#   r$   rm   Š   ó
    rm   c                   @   sB   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚAddressr
   Nc                 C   s6   t  | |¡ |rt|  ¡ ƒdd … }|  |¡ d S d S r'   )ra   r(   r   rZ   Ú_generateAddressDetails)r-   r.   Údatar#   r#   r$   r(   ™   s
   þzAddress.__init__c                 C   s<   g | _ |rt |¡}| j  |¡ || ¡ d … }|sd S d S rG   )Úaddress_detailsÚAddressDetailsr1   r2   Úget_total_length)r-   r4   Úaddressr#   r#   r$   rv   Ÿ   s   
ýzAddress._generateAddressDetailsc                 C   rn   rG   )ru   rP   r7   r#   r#   r$   rD   ¦   rI   zAddress.get_typec                 C   r9   r/   )rX   r7   r#   r#   r$   Ú
get_number©   r=   zAddress.get_numberc                 C   rF   rG   )rx   r7   r#   r#   r$   Úget_address_details¬   rI   zAddress.get_address_detailsc                 C   s$   d}| j D ]
}|dt|ƒ 7 }q|S )Nz
Addresses:rK   )rx   rL   )r-   rM   Úaddress_detailr#   r#   r$   rO   ¯   s   
zAddress.__str__rG   )
r   r   r   rP   r(   rv   rD   r|   r}   rO   r#   r#   r#   r$   ru   –   s    
ru   c                   @   sf   e Zd ZdZedd„ ƒZddd„Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ry   éÌ   c                 C   s   t |ƒ}|S rG   )ry   )rd   r4   Úar#   r#   r$   r1   ¹   s   zAddressDetails.createNc                 C   s<   |rt d|dd… ƒd }|d | _|d | j… | _d S d S )NrW   r   r   r   )r   Útotal_lengthrT   )r-   r.   Úaddr_lengthr#   r#   r$   r(   ¿   s
   
ýzAddressDetails.__init__c                 C   rF   rG   )r�   r7   r#   r#   r$   rz   Å   rI   zAddressDetails.get_total_lengthc                 C   s   | j dd… S )Nr   r	   )rT   r7   r#   r#   r$   Úget_protocol_typeÈ   ó   z AddressDetails.get_protocol_typec                 C   ó   t | jdƒS r>   ©r;   rT   r7   r#   r#   r$   Úget_protocol_lengthË   rs   z"AddressDetails.get_protocol_lengthc                 C   r…   r@   r†   r7   r#   r#   r$   Úget_protocolÎ   rs   zAddressDetails.get_protocolc                 C   r…   )Nr   )rB   rT   r7   r#   r#   r$   Úget_address_lengthÑ   rs   z!AddressDetails.get_address_lengthc                 C   s8   t | jd|  ¡ ƒ}|  ¡ tjkrt |¡S t 	d¡ |S )Nr   zAddress not IP)
rZ   rT   r‰   rˆ   ry   ÚPROTOCOL_IPrg   rh   r   Úerror)r-   r{   r#   r#   r$   Úget_addressÔ   s
   

zAddressDetails.get_addressc                 C   s   |   ¡ tjkS rG   )rˆ   ry   rŠ   r7   r#   r#   r$   Úis_protocol_IPÜ   r„   zAddressDetails.is_protocol_IPc                 C   s    d|   ¡ |  ¡ |  ¡ |  ¡ f S )Nz9Protocol Type:%r Protocol:%r Address Length:%r Address:%s)rƒ   rˆ   r‰   rŒ   r7   r#   r#   r$   rO   ß   s    zAddressDetails.__str__rG   )r   r   r   rŠ   rk   r1   r(   rz   rƒ   r‡   rˆ   r‰   rŒ   r�   rO   r#   r#   r#   r$   ry   µ   s    

ry   c                   @   rl   )	ÚPortr   c                 C   rn   rG   )rŽ   rP   r7   r#   r#   r$   rD   å   rI   zPort.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   Úget_portè   r=   zPort.get_portc                 C   rr   )NzPort:)r�   r7   r#   r#   r$   rO   ë   rs   zPort.__str__N)r   r   r   rP   rD   r�   rO   r#   r#   r#   r$   rŽ   â   rt   rŽ   c                   @   sr   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCapabilitiesr   Nc                 C   sH   t  | |¡ d| _d| _d| _d| _d| _d| _d| _d| _	|  
¡  d S )NF)ra   r(   Ú_capabilities_processedÚ_routerÚ_transparent_bridgeÚ_source_route_bridgeÚ_switchÚ_hostÚ_igmp_capableÚ	_repeaterÚ_init_capabilitiesr,   r#   r#   r$   r(   ò   s   zCapabilities.__init__c                 C   rn   rG   )r�   rP   r7   r#   r#   r$   rD   ÿ   rI   zCapabilities.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   Úget_capabilities  r=   zCapabilities.get_capabilitiesc                 C   s‚   | j rd S td|  ¡ ƒd }|d@ dk| _|d@ dk| _|d@ dk| _|d@ dk| _|d@ dk| _|d@ dk| _|d	@ dk| _	d S )
Nz!Lr   r	   r
   r   r   é   é    é@   )
r‘   r   rš   r’   r“   r”   r•   r–   r—   r˜   )r-   Úcapabilitiesr#   r#   r$   r™     s   zCapabilities._init_capabilitiesc                 C   rF   rG   )r’   r7   r#   r#   r$   Ú	is_router  rI   zCapabilities.is_routerc                 C   rF   rG   )r“   r7   r#   r#   r$   Úis_transparent_bridge  rI   z"Capabilities.is_transparent_bridgec                 C   rF   rG   )r”   r7   r#   r#   r$   Úis_source_route_bridge  rI   z#Capabilities.is_source_route_bridgec                 C   rF   rG   )r•   r7   r#   r#   r$   Ú	is_switch  rI   zCapabilities.is_switchc                 C   rF   rG   )Úis_hostr7   r#   r#   r$   r£     rI   zCapabilities.is_hostc                 C   rF   rG   )r—   r7   r#   r#   r$   Úis_igmp_capable!  rI   zCapabilities.is_igmp_capablec                 C   rF   rG   )r˜   r7   r#   r#   r$   Úis_repeater$  rI   zCapabilities.is_repeaterc                 C   rr   )NzCapabilities:)rš   r7   r#   r#   r$   rO   (  rs   zCapabilities.__str__rG   )r   r   r   rP   r(   rD   rš   r™   rŸ   r    r¡   r¢   r£   r¤   r¥   rO   r#   r#   r#   r$   r�   ï   s    
r�   c                   @   rl   )	ÚSoftVersionr   c                 C   rn   rG   )r¦   rP   r7   r#   r#   r$   rD   /  rI   zSoftVersion.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   r<   2  r=   zSoftVersion.get_versionc                 C   rr   )NzVersion:)r<   r7   r#   r#   r$   rO   5  rs   zSoftVersion.__str__N)r   r   r   rP   rD   r<   rO   r#   r#   r#   r$   r¦   ,  rt   r¦   c                   @   rl   )	ÚPlatformr   c                 C   rn   rG   )r§   rP   r7   r#   r#   r$   rD   <  rI   zPlatform.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   Úget_platform?  r=   zPlatform.get_platformc                 C   ó   d|   ¡  S )NzPlatform:%r)r¨   r7   r#   r#   r$   rO   B  rs   zPlatform.__str__N)r   r   r   rP   rD   r¨   rO   r#   r#   r#   r$   r§   9  rt   r§   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚIpPrefixr   c                 C   rn   rG   )rª   rP   r7   r#   r#   r$   rD   I  rI   zIpPrefix.get_typec                 C   s   t  | d¡S r/   )ra   rj   r7   r#   r#   r$   Úget_ip_prefixL  rs   zIpPrefix.get_ip_prefixc                 C   r9   r'   r:   r7   r#   r#   r$   Úget_bitsO  r=   zIpPrefix.get_bitsc                 C   s   d|   ¡ |  ¡ f S )NzIP Prefix/Gateway: %r/%d)r«   r¬   r7   r#   r#   r$   rO   R  ó   zIpPrefix.__str__N)r   r   r   rP   rD   r«   r¬   rO   r#   r#   r#   r$   rª   F  s    rª   c                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚProtocolHellor   c                 C   rn   rG   )r®   rP   r7   r#   r#   r$   rD   X  rI   zProtocolHello.get_typec                 C   r9   )Né	   )rj   r7   r#   r#   r$   Úget_master_ip[  r=   zProtocolHello.get_master_ipc                 C   r9   )Nr   r:   r7   r#   r#   r$   r<   ^  r=   zProtocolHello.get_versionc                 C   r9   )Né   r:   r7   r#   r#   r$   Úget_sub_versiona  r=   zProtocolHello.get_sub_versionc                 C   r9   )Né   r:   r7   r#   r#   r$   Ú
get_statusd  r=   zProtocolHello.get_statusc                 C   ó   t |  ¡ ƒdd… S )Nr   é   ©r   rZ   r7   r#   r#   r$   Úget_cluster_command_macg  r­   z%ProtocolHello.get_cluster_command_macc                 C   rµ   )Né   é"   r·   r7   r#   r#   r$   Úget_switch_macj  r­   zProtocolHello.get_switch_macc                 C   r9   )Né$   rA   r7   r#   r#   r$   Úget_management_vlanm  r=   z!ProtocolHello.get_management_vlanc                 C   s0   d|   ¡ |  ¡ |  ¡ |  ¡ t|  ¡ ƒ|  ¡ f S )Nzb


ProcolHello: Master IP:%s version:%r subversion:%r status:%r Switch's Mac:%r Management VLAN:%r)r°   r<   r²   r´   r`   r»   r½   r7   r#   r#   r$   rO   p  s   *ÿzProtocolHello.__str__N)r   r   r   rP   rD   r°   r<   r²   r´   r¸   r»   r½   rO   r#   r#   r#   r$   r®   U  s    r®   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )ÚVTPManagementDomainr¯   c                 C   rn   rG   )r¿   rP   r7   r#   r#   r$   rD   w  rI   zVTPManagementDomain.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   Ú
get_domainz  r=   zVTPManagementDomain.get_domainN)r   r   r   rP   rD   rÀ   r#   r#   r#   r$   r¿   t  ó    r¿   c                   @   rl   )	ÚDuplexé   c                 C   rn   rG   )rÂ   rP   r7   r#   r#   r$   rD   �  rI   zDuplex.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   Ú
get_duplex„  r=   zDuplex.get_duplexc                 C   s   |   ¡ dkS r>   )rÄ   r7   r#   r#   r$   Úis_full_duplex‡  rs   zDuplex.is_full_duplexN)r   r   r   rP   rD   rÄ   rÅ   r#   r#   r#   r$   rÂ   ~  rt   rÂ   c                   @   r¾   )ÚVLANé
   c                 C   rn   rG   )rÆ   rP   r7   r#   r#   r$   rD   �  rI   zVLAN.get_typec                 C   ro   rG   rp   r7   r#   r#   r$   Úget_vlan_number�  r=   zVLAN.get_vlan_numberN)r   r   r   rP   rD   rÈ   r#   r#   r#   r$   rÆ   Š  rÁ   rÆ   c                   @   rl   )	ÚTrustBitmapr±   c                 C   rn   rG   )rÉ   rP   r7   r#   r#   r$   rD   ˜  rI   zTrustBitmap.get_typec                 C   ó   |   ¡ S rG   ©re   r7   r#   r#   r$   Úget_trust_bitmap›  ó   zTrustBitmap.get_trust_bitmapc                 C   r©   )NzTrustBitmap Trust Bitmap:%r)rÌ   r7   r#   r#   r$   rO   ž  rs   zTrustBitmap.__str__N)r   r   r   rP   rD   rÌ   rO   r#   r#   r#   r$   rÉ   •  rt   rÉ   c                   @   rl   )	ÚUntrustedPortCoSr³   c                 C   rn   rG   )rÎ   rP   r7   r#   r#   r$   rD   ¤  rI   zUntrustedPortCoS.get_typec                 C   rÊ   rG   rË   r7   r#   r#   r$   Úget_port_CoS§  rÍ   zUntrustedPortCoS.get_port_CoSc                 C   r©   )NzUntrustedPortCoS port CoS %r)rÏ   r7   r#   r#   r$   rO   ª  rs   zUntrustedPortCoS.__str__N)r   r   r   rP   rD   rÏ   rO   r#   r#   r#   r$   rÎ   ¡  rt   rÎ   c                   @   ó   e Zd ZdZdd„ ZdS )ÚManagementAddressesé   c                 C   rn   rG   )rÑ   rP   r7   r#   r#   r$   rD   °  rI   zManagementAddresses.get_typeN©r   r   r   rP   rD   r#   r#   r#   r$   rÑ   ­  ó    rÑ   c                   @   rÐ   )ÚMTUr   c                 C   rn   rG   )rÕ   rP   r7   r#   r#   r$   rD   ¶  rI   zMTU.get_typeNrÓ   r#   r#   r#   r$   rÕ   ³  rÔ   rÕ   c                   @   rÐ   )Ú
SystemNamer   c                 C   rn   rG   )rÖ   rP   r7   r#   r#   r$   rD   ¼  rI   zSystemName.get_typeNrÓ   r#   r#   r#   r$   rÖ   ¹  rÔ   rÖ   c                   @   rÐ   )ÚSystemObjectIdr   c                 C   rn   rG   )r×   rP   r7   r#   r#   r$   rD   Â  rI   zSystemObjectId.get_typeNrÓ   r#   r#   r#   r$   r×   ¿  rÔ   r×   c                   @   rÐ   )r"   r   c                 C   rn   rG   )r"   rP   r7   r#   r#   r$   rD   È  rI   zSnmpLocation.get_typeNrÓ   r#   r#   r#   r$   r"   Å  rÔ   r"   c                   @   rÐ   )ÚDummyCdpElementé™   c                 C   rn   rG   )rØ   rP   r7   r#   r#   r$   rD   Ï  rI   zDummyCdpElement.get_typeNrÓ   r#   r#   r#   r$   rØ   Ì  rÔ   rØ   c                   @   s®   e Zd Zi eje“eje“eje“eje“eje“e	je	“e
je
“eje“eje“eje“eje“eje“eje“eje“eje“eje“eje“ejei¥Zedd„ ƒZdS )r0   c                 C   sH   t d|dd… ƒd }z
| j| }W ||ƒS  ty#   t}Y ||ƒS w )NrW   r   r
   )r   ÚelementTypeMapÚKeyErrorrØ   )rd   r.   Ú_typeÚ
class_typer#   r#   r$   r1   é  s   ýýzCDPElementFactory.createN)r   r   r   rm   rP   rŽ   r�   ru   r¦   r§   rª   r®   r¿   rÆ   rÂ   rÉ   rÎ   rÑ   rÕ   rÖ   r×   r"   rÚ   rk   r1   r#   r#   r#   r$   r0   Ò  sP    ÿþýüûúùø	÷
öõôóòñðïîr0   )&Ústructr   rg   Úimpacket.ImpactPacketr   r   Úimpacketr   rf   r   r%   r;   rB   rX   rZ   r`   ra   rm   ru   ry   rŽ   r�   r¦   r§   rª   r®   r¿   rÂ   rÆ   rÉ   rÎ   rÑ   rÕ   rÖ   r×   r"   rØ   r0   r#   r#   r#   r$   Ú<module>   sD   2	-=
