a
    kÄ#d•  ã                   @   sÜ   d Z ddlZddl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mZmZmZ dZd	ZG d
d„ deƒ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d� G dd„ deƒZdS )zÃ
LLMNR (Link Local Multicast Node Resolution).

[RFC 4795]

LLMNR is based on the DNS packet format (RFC1035 Section 4)
RFC also envisions LLMNR over TCP. Like vista, we don't support it -- arno
é    N)ÚBitEnumFieldÚBitFieldÚ
ShortField)ÚPacketÚbind_layersÚbind_bottom_up)Úorb)ÚUDP)Ú
DNSQRFieldÚ
DNSRRFieldÚDNSRRCountFieldÚDNS_amzFF02:0:0:0:0:0:1:3z224.0.0.252c                   @   sÔ   e Zd ZdZeddƒedddƒedddddiƒed	ddƒed
ddƒedddƒedddddiƒedddƒedddƒedddƒedddƒedddƒe	dddƒe	dddƒe	ddddƒgZ
edddœiZdd„ Zdd„ ZdS )Ú
LLMNRQueryz,Link Local Multicast Node Resolution - QueryÚidr   Úqré   Úopcodeé   ZQUERYÚcZtcé   ÚzZrcodeÚokZqdcountNÚqdZancountÚanZnscountÚnsZarcountÚaréë  ©ÚsportÚdportc                 C   s   t  d| j¡S )Nz!H)ÚstructÚpackr   ©Úself© r$   úI/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/llmnr.pyÚhashret4   s    zLLMNRQuery.hashretc                 C   sF   | j r$d| j j ¡ | j jf tgfS | jrBd| jj ¡ f tgfS d S )NzLLMNRResponse '%s' is at '%s'zLLMNRQuery who has '%s')r   ZrrnameÚdecodeZrdatar	   r   Zqnamer"   r$   r$   r%   Ú	mysummary7   s    
þý
ÿþzLLMNRQuery.mysummary)Ú__name__Ú
__module__Ú__qualname__Únamer   r   r   r   r
   r   Zfields_descr	   Zoverload_fieldsr&   r(   r$   r$   r$   r%   r   !   s(   










òr   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚLLMNRResponsez/Link Local Multicast Node Resolution - Responser   c                 C   s*   t |tƒo(| j|jko(| jdko(|jdkS )Nr   r   )Ú
isinstancer   r   r   )r#   Úotherr$   r$   r%   ÚanswersG   s    

ÿþýzLLMNRResponse.answersN)r)   r*   r+   r,   r   r0   r$   r$   r$   r%   r-   C   s   r-   c                   @   s   e Zd Zeddd„ƒZdS )Ú_LLMNRNc                 O   s(   t |ƒdkr$t|d ƒd@ r tS tS | S )Nr   é€   )Úlenr   r-   r   )ÚclsZ_pktÚargsZkargsr$   r$   r%   Údispatch_hookO   s
    z_LLMNR.dispatch_hook)N)r)   r*   r+   Úclassmethodr6   r$   r$   r$   r%   r1   N   s   r1   r   )r   )r   r   c                   @   s   e Zd ZdZdZeZdS )ÚLLMNR_amZllmnr_spoofzudp port 5355N)r)   r*   r+   Zfunction_nameÚfilterr   r4   r$   r$   r$   r%   r8   ^   s   r8   )Ú__doc__r    Zscapy.fieldsr   r   r   Zscapy.packetr   r   r   Zscapy.compatr   Zscapy.layers.inetr	   Zscapy.layers.dnsr
   r   r   r   Z_LLMNR_IPv6_mcast_AddrZ_LLMNR_IPv4_mcast_addrr   r-   r1   r8   r$   r$   r$   r%   Ú<module>   s   	"