a
    kÄ#dv  ã                   @   s’  d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZ ddlmZmZmZmZmZ ddlmZmZ ddlmZmZ dd	lmZmZ dd
lmZmZ g d¢ZddlmZm Z  dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%e	ròddl&T n~e�r0ddl'm(Z(m)Z)m*Z* ddl+T ej,�s*ddl-T de_.dZ/n@e
�r@ddl0T n0e�r\ddl1T ddl2T dZ/ne 3dej4 ¡ dZ/e	�s|e�rˆej5 6d¡ eƒ  dS )z*
Operating system specific functionality.
é    N©Úorb)ÚconfÚ_set_conf_sockets)ÚLINUXÚSOLARISÚWINDOWSÚBSD)ÚARPHDR_ETHERÚARPHDR_LOOPBACKÚ
ARPHDR_PPPÚ
ARPHDR_TUNÚIPV6_ADDR_GLOBAL)Úlog_loadingÚScapy_Exception)ÚNetworkInterfaceÚnetwork_name)Ú	inet_ptonÚ	inet_ntop)ÚOptionalÚUnion)Úget_if_addrÚget_if_addr6Úget_if_hwaddrÚget_if_listÚget_if_raw_addrÚget_if_raw_addr6Úget_if_raw_hwaddrÚget_working_ifÚin6_getifaddrÚread_routesÚread_routes6ÚSIOCGIFHWADDR)r   r   c                 C   s   dd d… t dd„ | D ƒƒ S )Nz%02x:%02x:%02x:%02x:%02x:%02x:éÿÿÿÿc                 s   s   | ]}t |ƒV  qd S )Nr   ©Ú.0Úx© r'   úJ/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/arch/__init__.pyÚ	<genexpr>A   ó    zstr2mac.<locals>.<genexpr>)Útuple)Úsr'   r'   r(   Ústr2mac>   s    r-   c                 C   s   t tjt| ƒƒS )zH
    Returns the IPv4 of an interface or "0.0.0.0" if not available
    )r   ÚsocketÚAF_INETr   ©Úiffr'   r'   r(   r   D   s    r   c                 C   sD   ddl m} || ƒ\}}|ttttfv r0t|ƒS td|| f ƒ‚dS )z<
    Returns the MAC (hardware) address of an interface
    r   )r   z2Unsupported address family (%i) for interface [%s]N)Z
scapy.archr   r
   r   r   r   r-   r   )r1   r   Z
addrfamilyÚmacr'   r'   r(   r   L   s
    r   c                    s"   t | ƒ‰ t‡ fdd„tƒ D ƒdƒS )z¦
    Returns the main global unicast address associated with provided
    interface, in human readable form. If no global address is found,
    None is returned.
    c                 3   s.   | ]&}|d  ˆ kr|d t kr|d V  qdS )é   é   r   N)r   r$   r0   r'   r(   r)   a   s   ÿzget_if_addr6.<locals>.<genexpr>N)r   Únextr   )Zniffr'   r0   r(   r   Y   s    ÿr   c                 C   s    t | ƒ}|durttj|ƒS dS )z¡
    Returns the main global unicast address associated with provided
    interface, in network format. If no global address is found, None
    is returned.
    N)r   r   r.   ÚAF_INET6)r1   Zip6r'   r'   r(   r   e   s    r   )Ú*)r    r!   r   Tz7Scapy currently does not support %s! I/O will NOT work!Ztuntap)7Ú__doc__r.   ÚsysZscapy.compatr   Zscapy.configr   r   Zscapy.constsr   r   r   r	   Z
scapy.datar
   r   r   r   r   Zscapy.errorr   r   Zscapy.interfacesr   r   Zscapy.pton_ntopr   r   r   r   Ú__all__r   r   r-   r   r   r   r   Zscapy.arch.linuxZscapy.arch.unixr    r!   r   Zscapy.arch.bpf.coreZuse_pcapZscapy.arch.bpf.supersocketZuse_bpfr"   Zscapy.arch.solarisZscapy.arch.windowsZscapy.arch.windows.nativeÚcriticalÚplatformZload_layersÚappendr'   r'   r'   r(   Ú<module>   sN   		

ÿ