a
    kÄ#d^	  ã                   @   sô   d 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mZ ddlmZ G dd„ de
ƒZG dd	„ d	e
ƒZeeed
d� eeed
d� eeedd� eeedd� eeed
d
d� eeeddd� ejedd
d� ejeddd� dS )zÊ
HSRP (Hot Standby Router Protocol)
A proprietary redundancy protocol for Cisco routers.

- HSRP Version 1: RFC 2281
- HSRP Version 2:
    http://www.smartnetworks.jp/2006/02/hsrp_8_hsrp_version_2.html
é    )ÚByteEnumFieldÚ	ByteFieldÚIPFieldÚSourceIPFieldÚStrFixedLenFieldÚ	XIntFieldÚXShortField)ÚPacketÚbind_layersÚbind_bottom_up)ÚDestIPFieldÚUDP)ÚDestIP6Fieldc                   @   sŠ   e Zd Zd Zeddƒedddddddœƒed	d
dddddddœƒeddƒeddƒeddƒeddƒeddƒedddƒeddƒg
Zd d!„ Z	d"S )#ÚHSRPÚversionr   ÚopcodeZHelloZCoupZResignZ	Advertise)r   é   é   é   Ústateé   ZInitialZLearnZListenZSpeakZStandbyZActive)r   r   r   é   é   r   Z	hellotimer   Zholdtimeé
   Úpriorityéx   Úgroupr   ÚreservedÚauths   cisco   r   Z	virtualIPz192.168.1.1c                 C   s    | j jdkrtS t | |¡S d S )Né   )Z
underlayerÚlenÚHSRPmd5r	   Úguess_payload_class)ÚselfÚpayload© r%   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/hsrp.pyr"   $   s    zHSRP.guess_payload_classN)
Ú__name__Ú
__module__Ú__qualname__Únamer   r   r   r   Úfields_descr"   r%   r%   r%   r&   r      s   
ör   c                   @   sj   e Zd ZdZeddddiƒeddƒeddd	d
iƒeddƒeddƒeddƒeddƒe	dddƒgZ
dd„ ZdS )r!   zHSRP MD5 AuthenticationÚtyper   zMD5 authenticationr    NÚalgor   r   ÚMD5ÚpaddingÚflagsZsourceipZkeyidZ
authdigests                   r   c                 C   sB   | j d u r>|r>t |ƒ}|d d… t|ƒdd …  |dd …  }|S )Nr   é   )r    Úhex)r#   ÚpZpayZtmp_lenr%   r%   r&   Ú
post_build7   s    (zHSRPmd5.post_build)r'   r(   r)   r*   r   r   r   r   r   r   r+   r4   r%   r%   r%   r&   r!   +   s   
ø
r!   iÁ  )Údport)Úsportií  )r5   r6   z	224.0.0.2zff02::66N)Ú__doc__Zscapy.fieldsr   r   r   r   r   r   r   Zscapy.packetr	   r
   r   Zscapy.layers.inetr   r   Zscapy.layers.inet6r   r   r!   Z	bind_addrr%   r%   r%   r&   Ú<module>   s   	$