o
    àý°j4  ã                   @   sJ   d dl Z d dlZd dlmZ d dlmZ G dd„ deƒZG dd„ dƒZdS )é    N)ÚImpactPacket)ÚICMP6c                   @   sp   e Zd ZdZdZdZdZdZdd„ Ze	dd	„ ƒZ
e	d
d„ ƒZe	dd„ ƒZe	dd„ ƒZe	dd„ ƒZe	dd„ ƒZdS )ÚNDPé…   é†   é‡   éˆ   é‰   c                 C   s   |   ¡  ¡  | ¡ ¡ d S ©N)ÚchildÚ	get_bytesÚextend)ÚselfÚ
ndp_option© r   ú/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/NDP.pyÚappend_ndp_option   s   zNDP.append_ndp_optionc                 C   s   t  dd¡}|  tj|¡S ©Nú>Lr   )ÚstructÚpackÚ_NDP__build_messager   ÚROUTER_SOLICITATION)Úclass_objectÚmessage_datar   r   r   ÚRouter_Solicitation%   s   zNDP.Router_Solicitationc           	      C   s>   d}|r|dO }|r|dO }t  d|||||¡}|  tj|¡S )Nr   é€   é@   z>BBHLL)r   r   r   r   ÚROUTER_ADVERTISEMENT)	r   Úcurrent_hop_limitÚmanaged_flagÚ
other_flagÚrouter_lifetimeÚreachable_timeÚretransmission_timerÚ	flag_byter   r   r   r   ÚRouter_Advertisement*   s   zNDP.Router_Advertisementc                 C   s,   t  dd¡}|t | ¡ ¡7 }|  tj|¡S r   )r   r   r   Úarray_tobytesÚas_bytesr   r   ÚNEIGHBOR_SOLICITATION)r   Útarget_addressr   r   r   r   ÚNeighbor_Solicitation7   s   zNDP.Neighbor_Solicitationc                 C   sZ   d}|r|dO }|r|dO }|r|dO }t  d|ddd¡}|t | ¡ ¡7 }|  tj|¡S )Nr   r   r   é    z>BBBB)r   r   r   r'   r(   r   r   ÚNEIGHBOR_ADVERTISEMENT)r   Úrouter_flagÚsolicited_flagÚoverride_flagr*   r%   r   r   r   r   ÚNeighbor_Advertisement>   s   zNDP.Neighbor_Advertisementc                 C   s>   t  dd¡}|t | ¡ ¡7 }|t | ¡ ¡7 }|  tj|¡S r   )r   r   r   r'   r(   r   r   ÚREDIRECT)r   r*   Údestination_addressr   r   r   r   ÚRedirectM   s   zNDP.Redirectc                 C   s:   t ƒ }| |¡ | d¡ t ¡ }| |¡ | |¡ |S )Nr   )r   Úset_typeÚset_coder   ÚDataÚset_dataÚcontains)r   Útyper   Ú
ndp_packetÚndp_payloadr   r   r   Ú__build_messageU   s   



zNDP.__build_messageN)Ú__name__Ú
__module__Ú__qualname__r   r   r)   r-   r2   r   Úclassmethodr   r&   r+   r1   r4   r   r   r   r   r   r      s&    




r   c                   @   st   e Zd ZdZdZdZdZdZedd„ ƒZ	edd	„ ƒZ
ed
d„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdS )Ú
NDP_Optioné   é   é   é   é   c                 C   ó   |   tj|¡S r
   )Ú_NDP_Option__Link_Layer_AddressrB   ÚSOURCE_LINK_LAYER_ADDRESS©r   Úlink_layer_addressr   r   r   ÚSource_Link_Layer_Addresso   ó   z$NDP_Option.Source_Link_Layer_Addressc                 C   rH   r
   )rI   rB   ÚTARGET_LINK_LAYER_ADDRESSrK   r   r   r   ÚTarget_Link_Layer_Addresst   rN   z$NDP_Option.Target_Link_Layer_Addressc                 C   s0   t |ƒd d }t t d|¡¡}|  |||¡S )Né   rC   ÚB)Úlenr   r'   ÚarrayÚ_NDP_Option__build_option)r   Úoption_typerL   Úoption_lengthÚoption_datar   r   r   Ú__Link_Layer_Addressy   s   zNDP_Option.__Link_Layer_Addressc           
      C   sh   d}|r|dO }|r|dO }t  d||||¡}|t  dd¡7 }|t t d|¡¡7 }d}	|  tj|	|¡S )Nr   r   r   z>BBLLr   rR   rF   )r   r   r   r'   rT   rU   rB   ÚPREFIX_INFORMATION)
r   Úprefix_lengthÚon_link_flagÚautonomous_flagÚvalid_lifetimeÚpreferred_lifetimeÚprefixr%   rX   rW   r   r   r   ÚPrefix_Information€   s   zNDP_Option.Prefix_Informationc              	   C   sL   t  ddddddd¡}|t t d|¡¡7 }t|ƒd d }|  tj||¡S )Nz>BBBBBBr   rR   rF   rQ   )	r   r   r   r'   rT   rS   rU   rB   ÚREDIRECTED_HEADER)r   Úoriginal_packetrX   rW   r   r   r   ÚRedirected_Header’   s   zNDP_Option.Redirected_Headerc                 C   s2   t  ddd¡}|t  d|¡7 }d}|  tj||¡S )Nú>BBr   r   rC   )r   r   rU   rB   Ú
MTU_OPTION)r   ÚmturX   rW   r   r   r   ÚMTU™   s   zNDP_Option.MTUc                 C   s,   t  d||¡}||7 }t ¡ }| |¡ |S )Nre   )r   r   r   r7   r8   )r   r:   ÚlengthrX   Ú
data_bytesr   r   r   r   Ú__build_option¡   s
   
zNDP_Option.__build_optionN)r>   r?   r@   rJ   rO   rZ   rb   rf   rA   rM   rP   rI   ra   rd   rh   rU   r   r   r   r   rB   f   s(    





rB   )rT   r   Úimpacketr   Úimpacket.ICMP6r   r   rB   r   r   r   r   Ú<module>   s   S