HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/network.cpython-310.pyc
o

�N�g��@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddl
ZddlZddlZddlZddlmZddlmZe�e�Zdd�Zdwd	d
�Zdxdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd�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+ej,j-j.�/d0�d1d0��Z0ej,j-j.�/d2�d3d2��Z1ej,j-j.�/d4�d5d4��Z2d6d7�Z3d8d9�Z4ej,j5�6e4d:�Z7d;d<�Z8d=d>�Z9dyd?d@�Z:dAdB�Z;dCdD�Z<dEdF�Z=dGdH�Z>dydIdJ�Z?dzdKdL�Z@ej,j5�6e@dM�ZAd{dNdO�ZBej,j5�6eBdP�ZCdQdR�ZDdSdT�ZEdUdV�ZFdydWdX�ZGdYdZ�ZHd[d\�ZId]d^�ZJd_d`�ZKdadb�ZLdcdd�ZMdedf�ZNdydgdh�ZOdydidj�ZPdkdl�ZQdmdn�ZRdodp�ZSd|dqdr�ZTd|dsdt�ZUdudv�ZVdS)}z7
Module for gathering and managing network information
�N)�	ipaddress)�CommandExecutionErrorcCstjj��rdSdS)z)
    Only work on POSIX-like systems
    )FzRThe network execution module cannot be loaded on Windows: use win_network instead.T)�salt�utils�platformZ
is_windows�rr�H/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/network.py�__virtual__sr	�255.255.255.255�	cCsNtd|�}t�tjtj�}|�tjtjd�|�d|d|t|�f�dS)a
    Send Wake On Lan packet to a host

    CLI Example:

    .. code-block:: bash

        salt '*' network.wol 08-00-27-13-69-77
        salt '*' network.wol 080027136977 255.255.255.255 7
        salt '*' network.wol 08:00:27:13:69:77 255.255.255.255 7
    znetwork.mac_str_to_bytes�s�������T)	�	__utils__�socket�AF_INET�
SOCK_DGRAM�
setsockopt�
SOL_SOCKET�SO_BROADCAST�sendto�int)ZmacZbcastZdestport�dest�sockrrr�wol(s
rFcCs~|rtddkrd�td|�|�}nd�|td|��}n	d�td|��}|r9td|�}|dd	kr7d
SdStd|�S)
a�
    Performs an ICMP ping to a host

    .. versionchanged:: 2015.8.0
        Added support for SunOS

    CLI Example:

    .. code-block:: bash

        salt '*' network.ping archlinux.org

    .. versionadded:: 2015.5.0

    Return a True or False instead of ping output.

    .. code-block:: bash

        salt '*' network.ping archlinux.org return_boolean=True

    Set the time to wait for a response in seconds.

    .. code-block:: bash

        salt '*' network.ping archlinux.org timeout=3
    �kernel�SunOSzping -c 4 {} {}�network.sanitize_hostzping -W {} -c 4 {}zping -c 4 {}�cmd.run_all�retcoderFT�cmd.run)�
__grains__�formatr�__salt__)�host�timeoutZreturn_boolean�cmd�retrrr�ping;s��r'c
Cs�g}d}td|�}|��D]O}|��}|�d�r:|�|d|d|d|d|d|d	|d
|d|dd
�	�|�d�r]|�|d|d|d|d|d|d	|d
|dd��q|S)z6
    Return netstat information for Linux distros
    znetstat -tulpnear�tcprr��������	�proto�recv-q�send-q�
local-address�remote-address�state�user�inode�program�udp�r1r2r3r4r5r7r8r9)r"�
splitlines�split�
startswith�append�r&r%�out�line�compsrrr�_netstat_linuxms@
��

���rDc

Csfg}d}td|�}|��D]�}|��}d}d}d}t|�}|�d�s(|�d�rkd}	|	|dkrk||	�d	�}
|
dd
krM|
d�d�}|d�d�d}|
dd
krW|
d}|
ddkra|
d}|	d7}	|	|dks0|�d�r�|d}|dkrzd}|�|d|d|d|d|d||||d�	�|�d�r�|�|d|d|d|d|d|||d��q|S)zf
    Return ss information for Linux distros
    (netstat is deprecated and may not be available)
    zss -tulpnearr�r(r:r-r�:�users�,�"�uid�inoZESTAB�ESTABLISHEDr)r*r+r,r0r;)r"r<r=�lenr>r?)
r&r%rArBrCZss_userZss_inodeZ
ss_program�length�i�fieldsrGZss_staterrr�	_ss_linux�sh�
��

���rQc
Cs8i}t�d�}tdd�}|��D]�}z|�dd�\}}}}}|�|���\}	}
}}Wnttfy6Yqw|
rG|
}
d�	|	durCdn|	�}n
|}
d�	|	durQdn|	�}|	r`d�
d	d
�|
D��}
d�
|
�dd
��}
|durpd}n	d�
|�dd
��}||�|
i��|i��|i��|i�d<|||
|||d<q|S)zE
    Get process information for network connections using fstat
    zKinternet(6)? (?:stream tcp 0x\S+ (\S+)|dgram udp (\S+))(?: [<>=-]+ (\S+))?$r�fstatNr+ztcp{}rEzudp{}css�|]	}|dvr|VqdS)z[]Nr��.0�xrrr�	<genexpr>�s�z#_netinfo_openbsd.<locals>.<genexpr>�.rFrz*.*r7r%)
�re�compiler"r<r=�match�groups�
ValueError�AttributeErrorr!�join�rsplit�
setdefault)r&Z	_fstat_rerArBr7r%�pid�_�details�ipv6r(r:�remote_addr�
local_addrr1rrr�_netinfo_openbsd�s>����
�rgc
Cs�i}tdd�tddkrdnd�dd�}|��D]?}|��\}}}}}}}	d	�|�d
d��}d	�|	�d
d��}	||�|i��|	i��|i��|i�d<||||	||d
<q|S)zH
    Get process information for network connections using sockstat
    rzsockstat -46 {} | tail -n+2r�NetBSDz-nrET�Zpython_shellrWrFrr7r%)r"r!r r<r=r^r_r`)
r&rArBr7r%rarbr1rfrerrr�_netinfo_freebsd_netbsds&����
�rjcCsPi}tddkrd}nd}td|dd�}|��D]}|��\}}|||<q|S)z/
    Return a dict of pid to ppid mappings
    rrzps -a -o pid,ppid | tail +2zps -ax -o pid,ppid | tail -n+2rTri)r r"r<r=)r&r%rArBra�ppidrrr�_ppids
rlc
sRg}tddkrKdD]?}d|�d�}td|dd�}|��D]*}|��}|d	|d
|d|d|d
d�}|d�d�rC|d|d<|�|�qq
nWd}td|dd�}|��D]}|��}|�|d	|d
|d|d|d
|dd��qYd}td|dd�}|��D]}|��}|�|d	|d
|d|d|d
d��q�t�}tddkr�t�}n	tddvr�t�}t	|�D]j\}	}
||	d}||	d}||	d}
z
||||
�Wn	t
y�Yq�w�fdd�|��D�}ztt
�fdd�|��D���}Wn
t�yYq�w�|d||	d<d�|�|d f�||	d!<q�|S)"z4
    Return netstat information for BSD flavors
    rrh��inet�inet6�netstat -f z -an | tail -n+3rTrirrr)r*r+)r1r2r3r4r5r1r(r,r6znetstat -p tcp -an | tail -n+3�r1r2r3r4r5r6znetstat -p udp -an | tail -n+3�OpenBSD)�FreeBSDrhr4r5csi|]\}}|�vr||�qSrr�rTrU�y��ptrrr�
<dictcomp>lsz _netstat_bsd.<locals>.<dictcomp>c3s �|]\}}|�vr|VqdS�NrrtrvrrrVps�z_netstat_bsd.<locals>.<genexpr>r7�/r%r9)r r"r<r=r>r?rlrgrj�	enumerate�KeyError�items�next�iter�
StopIterationr^)r&�addr_familyr%rArBrC�entryrkZnetinfo�idxrb�localZremoter1Z	conn_ppidZ
master_pidrrvr�_netstat_bsd's���������"� r�cCs�t�d�g}dD]k}d|�d�}td|dd�}|��D]"}|��}|�|dkr+d	nd
|d|d|d
|d|dd��qd|�d�}td|dd�}|��D]!}|��}|�|dkr`dnd|d
t|�dkrn|dndd��qRq	|S)�6
    Return netstat information for SunOS flavors
    z-User and program not (yet) supported on SunOSrmrpz -P tcp -an | tail +5rTriro�tcp6r(r,r+rrr-rqz -P udp -an | tail +5�udp6r:r)rE�r1r4r5)�log�warningr"r<r=r?rM)r&r�r%rArBrCrrr�_netstat_sunosxs8
�����
r�cCs$g}dD]�}d|�d�}td|dd�}|��D]v}|��}t|�dkr%qd}d}d	|d
ks5d|d
kr8d	}n$d|d
krAd}nd
|d
ksMd|d
krRd
}d}n
d|d
kr\d}d}|r{t|�dkrz|�||d|d|d|d|dd��qt|�dkr�|�||d|dd��qq|S)r�)rnznetstat -n -a -f z
 | tail -n +3rTrir,Nr(rZtcp4r�r:Zudp4Fr�r-rr)r*r+rqr�)r"r<r=rMr?)r&r�r%rArBrCZ
proto_seenZtcp_flagrrr�_netstat_aix�sT�������'r�c
Cs�g}d}td|dd�}|��D]}|��}|�d|d|d|d|d	|d
d��qd}td|dd�}|��D]<}|��}t|�d
kr\|�d|d|dd|d|dd��q;t|�d
krw|�d|d|dd|d|d
d��q;q;|S)z>
    Return netstat routing information for Linux distros
    znetstat -A inet -rn | tail -n+3rTrirnrrr)r*r.�r��destination�gateway�netmask�flags�	interfacez netstat -A inet6 -rn | tail -n+3r-rorEr,�r"r<r=r?rMr@rrr�_netstat_route_linux�sP��
��
��r�c
Cs�g}d}td|dd�}|��D]P}|��}|ddkrq|ddkr>d}|d	d
kr/|d}|�dd
|dd
d|d��qt|d�}d}|dd
krP|d}|�d|dd
|dd|d��qd}td|dd�}|��D]s}|��}|ddvr|qo|ddkr�d}|d	d
kr�|d}|�dd|ddd|d��qo|ddkr�d}|dd
kr�|d	}|dd}|�d|ddd|d��qot|d�}d}|dd
kr�|d}|�d|dddd|d��qo|S)zn
    Return ip routing information for Linux distros
    (netstat is deprecated and may not be available)
    zip -4 route show table mainrTrir�unreachable�defaultrEr*�devr+rn�0.0.0.0r)ZUGr�r�networkr��Uzip -6 route show table all)	Zunicast�	broadcast�throwr�ZprohibitZ	blackholeZnatZanycastZ	multicastro�::/0r�z/128z::)r"r<r=r?�convert_cidr)r&r%rArBrC�ip_interfaceZaddress_maskZ
local_addressrrr�_ip_route_linuxs�����������
r�c
Cs�g}d}td|dd�}|��D]A}|��}tddkr=tt�dd��d	kr=|�d
|d|d|d|d
|dd��q|�d
|d|dd|d|d
d��qd}td|dd�}|��D]}|��}|�d|d|dd|d|d
d��q`|S)zB
    Return netstat routing information for FreeBSD and macOS
    �netstat -f inet -rn | tail -n+5rTri�osrsZosmajorreleaser�
rnrr)r*r,r�rE� netstat -f inet6 -rn | tail -n+5ro)r"r<r=r r�getr?r@rrr�_netstat_route_freebsdsN����
��
r�c
C�g}d}td|dd�}|��D]}|��}|�d|d|dd|d	|d
d��qd}td|dd�}|��D]}|��}|�d
|d|dd|d	|d
d��q9|S)z7
    Return netstat routing information for NetBSD
    r�rTrirnrrrEr*r-r�r�ro�r"r<r=r?r@rrr�_netstat_route_netbsd��8��
��
r�c
Cr�)z8
    Return netstat routing information for OpenBSD
    r�rTrirnrrrEr)r.r�r�ror�r@rrr�_netstat_route_openbsd�r�r�c
C��g}d}td|dd�}|��D]"}|��}|�d|d|dd|d	t|�d
kr-|dndd��qd
}td|dd�}|��D]"}|��}|�d|d|dd|d	t|�d
kr^|dndd��qA|S)z6
    Return netstat routing information for SunOS
    znetstat -f inet -rn | tail +5rTrirnrrrEr)r-r,r�znetstat -f inet6 -rn | tail +5ror�r@rrr�_netstat_route_sunos��8��
��
r�c
Cr�)z4
    Return netstat routing information for AIX
    z netstat -f inet -rn | tail -n +5rTrirnrrrEr)r-r,r�z!netstat -f inet6 -rn | tail -n +5ror�r@rrr�_netstat_route_aixr�r�cCsbtddkrtdd�st�St�Stddvrt�Stddkr$t�Stddkr-t�Std��)	a�
    Return information on open ports and states

    .. note::
        On BSD minions, the output contains PID info (where available) for each
        netstat entry, fetched from sockstat/fstat output.

    .. versionchanged:: 2014.1.4
        Added support for OpenBSD, FreeBSD, and NetBSD

    .. versionchanged:: 2015.8.0
        Added support for SunOS

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' network.netstat
    r�Linux�
path.which�netstat)rrrsrhr�AIX�"Not yet supported on this platform)r rrQrDr�r�r�rrrrrr�Bsr�c	Cs�tddkrtd�Stddkrgi}t�D]N}|d�d�s q|ddkr'qd	�|d
�d	�dd��d	�|d
�d	�dd��d	�|d
�d	�dd��d	�|d
�d	�dd��d�|t|�d<q|Stddkr�i}t�D]N}|d�d�s|qr|ddkr�qrd	�|d
�d	�dd��d	�|d
�d	�dd��d	�|d
�d	�dd��d	�|d
�d	�dd��d�|t|�d<qr|SiS)a
    Return a dict containing information on all of the running TCP connections (currently linux and solaris only)

    .. versionchanged:: 2015.8.4

        Added support for SunOS

    CLI Example:

    .. code-block:: bash

        salt '*' network.active_tcp
    rr�znetwork.active_tcprr1r(r6rLrWr4N���r5)rfZ
local_portreZremote_portrr�)r rr�r>r^r=rMr�)r&�
connectionrrr�
active_tcpgs:

�
�r��
traceroutecCs�g}d�td|��}td|�}td�std�r gd�}nStdd�}z?t�d|�d	}t�d
|�g}|D]}z	|�t|��Wq9t	yR|�|�Yq9wt
|�dkr^|�d	�t�d|�Wn
tyrgd�}Ynw|��D�]k}d
}	d|vr�d}	|�
d�r�d}	td�r�|�
d�r�d}	|�
d�r�d}	|�
d�r�d}	|�
d�r�d}	|	r�t�d|�qwdt|d�vs�dt|d�vs�tddv�r1z
t�d|�d	}
Wnty�t�d|�d	}
Ynwt�d|
�t�dt|
��}z0|
ddk�r|
d	d d!�}n|
d	|
d|
d"d#�}t|�D]\}
}||d$|
d��<�qWn�t�y0i}Yn�w|d	d"k�r?|d"d%k�sM|d	d"k�r�|dd	k�r�|�d&�}t
|�d"k�rj|ddk�rjt|d	�d d!�}nkt
|�d'k�r�t|d	�|d��d	|d��d�d(�t|d"��d	�t|d��d	�t|d)��d	�d*�}n/i}n,|��}t
|�d+k�r�|d	|d|d"|d)|d,|d+|d|d'|d-d.�	}ni}|�|�|�s�t�d/|�qw|S)0a
    Performs a traceroute to a 3rd party host

    .. versionchanged:: 2015.8.0
        Added support for SunOS

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' network.traceroute archlinux.org
    z
traceroute {}rr�platform.is_sunoszplatform.is_aix)rrrztraceroute --versionz%.*[Vv]ersion (\d+)\.([\w\+]+)\.*(\w*)rztraceroute_version_raw: %sr*ztraceroute_version: %sF� Tr�ztrying to get source forzsource should bezoutgoing MTUzfragmentation requiredz#Skipping traceroute output line: %s�Darwinrrsr�rr�z"\s*(\d*)\s+(.*)\s+\((.*)\)\s+(.*)$z\s*(\d*)\s+(\*\s+\*\s+\*)z
traceline: %sz(\d+\.\d+)\s*msz* * *�*)�count�hostnamer))r�r��ip�ms�z  r,z()r+)r�r�r��ms1�ms2�ms3r/r-r.)	r�r�r�r�r�r�Zping1Zping2Zping3z'Cannot parse traceroute output line: %s)r!rr"rX�findallr��debugr?rr\rM�
IndexErrorr<r>�strr r{r=�strip�floatr�)r#r&r%rAZtraceroute_versionZversion_outZversion_raw�trBZ	skip_lineZ	tracelineZdelays�resultr��delayrCrrrr��s�
���
�





����

�	�
��digcCsd�td|��}td|�S)z�
    Performs a DNS lookup with dig

    CLI Example:

    .. code-block:: bash

        salt '*' network.dig archlinux.org
    zdig {}rr)r!rr")r#r%rrrr�)s�arpcCs�i}tdd�}|��D]i}|��}t|�dkrqtddkr/d|dvr&q|d||d<qtdd	krK|d
dksA|ddkrBq|d
||d<qtdd
krg|d
dvrXq|d�d��d�||d<q|d�d��d�||d<q|S)z�
    Return the arp table from the minion

    .. versionchanged:: 2015.8.0
        Added support for SunOS

    CLI Example:

    .. code-block:: bash

        salt '*' network.arp
    rzarp -anr+rrrFr�rrrr�Hostz(incomplete)r�)ZbucketZThere�(�)r*)r"r<r=rMr r�)r&rArBrCrrrr�8s(cC�
td�S)z�
    Return a dictionary of information about all the interfaces on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' network.interfaces
    znetwork.interfaces�rrrrr�
interfaces^�

r�cC�td|�S)z�
    Return the hardware address (a.k.a. MAC address) for a given interface

    CLI Example:

    .. code-block:: bash

        salt '*' network.hw_addr eth0
    znetwork.hw_addrr���ifacerrr�hw_addrk�
r��hwaddrcCr�)z�
    Return the inet address for a given interface

    .. versionadded:: 2014.7.0

    CLI Example:

    .. code-block:: bash

        salt '*' network.interface eth0
    znetwork.interfacer�r�rrrr�|�r�cCr�)z�
    Return the inet address for a given interface

    .. versionadded:: 2014.7.0

    CLI Example:

    .. code-block:: bash

        salt '*' network.interface_ip eth0
    �network.interface_ipr�r�rrr�interface_ip�r�r�cCr�)z�
    Returns a list of IPv4 subnets to which the host belongs

    CLI Example:

    .. code-block:: bash

        salt '*' network.subnets
        salt '*' network.subnets interfaces=eth1
    znetwork.subnetsr�)r�rrr�subnets�sr�cCr�)z�
    Returns a list of IPv6 subnets to which the host belongs

    CLI Example:

    .. code-block:: bash

        salt '*' network.subnets
    znetwork.subnets6r�rrrr�subnets6�r�r�cCr�)z�
    Returns True if host is within specified subnet, otherwise False.

    CLI Example:

    .. code-block:: bash

        salt '*' network.in_subnet 10.0.0.0/16
    �network.in_subnetr���cidrrrr�	in_subnet�r�r�cCstd||�S)z�
    Returns True if given IP is within specified subnet, otherwise False.

    CLI Example:

    .. code-block:: bash

        salt '*' network.ip_in_subnet 172.17.0.4 172.16.0.0/12
    r�r�)�ip_addrr�rrr�ip_in_subnet�s
r�cCsLdddd�}t|�}t�|�}t|j�|d<t|j�|d<t|j�|d<|S)z�
    returns the network address, subnet mask and broadcast address of a cidr address

    .. versionadded:: 2016.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' network.convert_cidr 172.31.0.0/16
    N)r�r�r�r�r�r�)�calc_netr�
ip_networkr��network_addressr��broadcast_address)r�r&Znetwork_inforrrr��s
r�cCstd||�S)aI
    Returns the CIDR of a subnet based on
    an IP address (CIDR notation supported)
    and optional netmask.

    CLI Example:

    .. code-block:: bash

        salt '*' network.calc_net 172.17.0.5 255.255.255.240
        salt '*' network.calc_net 2a02:f6e:a000:80:84d8:8332:7866:4e07/64

    .. versionadded:: 2015.8.0
    znetwork.calc_netr�)r�r�rrrr��sr�csVtd||d�}�r�fdd�|D�S|dkrdd�|D�S|dkr)dd�|D�S|S)	a�
    Returns a list of IPv4 addresses assigned to the host. 127.0.0.1 is
    ignored, unless 'include_loopback=True' is indicated. If 'interface' is
    provided, then only IP addresses from that interface will be returned.
    Providing a CIDR via 'cidr="10.0.0.0/8"' will return only the addresses
    which are within that subnet. If 'type' is 'public', then only public
    addresses will be returned. Ditto for 'type'='private'.

    .. versionchanged:: 3001
        ``interface`` can now be a single interface name or a list of
        interfaces. Globbing is also supported.

    CLI Example:

    .. code-block:: bash

        salt '*' network.ip_addrs
    znetwork.ip_addrs�r��include_loopbackc� g|]}td�|g�r|�qS�r�r��rTrOr�rr�
<listcomp>
� zip_addrs.<locals>.<listcomp>ZpubliccSsg|]}t|�s|�qSr��
is_privater�rrrr��ZprivatecSsg|]}t|�r|�qSrr�r�rrrr�r�r�)r�r�r��type�addrsrr�r�ip_addrs�s�r��ipaddrscs*td||d�}�r�fdd�|D�S|S)a.
    Returns a list of IPv6 addresses assigned to the host. ::1 is ignored,
    unless 'include_loopback=True' is indicated. If 'interface' is provided,
    then only IP addresses from that interface will be returned.
    Providing a CIDR via 'cidr="2000::/3"' will return only the addresses
    which are within that subnet.

    .. versionchanged:: 3001
        ``interface`` can now be a single interface name or a list of
        interfaces. Globbing is also supported.

    CLI Example:

    .. code-block:: bash

        salt '*' network.ip_addrs6
    znetwork.ip_addrs6r�cr�r�r�r�r�rrr�0r�zip_addrs6.<locals>.<listcomp>r�)r�r�r�r�rr�r�	ip_addrs6s�r��ipaddrs6cC�t��S)zi
    Get hostname

    CLI Example:

    .. code-block:: bash

        salt '*' network.get_hostname
    )r�gethostnamerrrr�get_hostname8�rcCr�)zx
    Get fully qualified domain name

    CLI Example:

    .. code-block:: bash

        salt '*' network.get_fqdn
    )r�getfqdnrrrr�get_fqdnFrrc
Cs|durdStdd�ptdd�}td�r*td�rdntdd	�}tdd
�}|�d�rgtd|�d��}d
|dkr[|d}|��D]}|�d�}d|d
vrY|d��}qFn!t�d|�td�}ntd�sqt�	�}ntd|��d�d}|�d�r�tdd�
||��}|dd
kr�t�d||d�dSn td�s�td|�d|���ntdd�
||�d�d
��tddd��}d d!�|��D�}	Wd�n1s�wYtddd"��J}
|	D]?}|��}z |||�|�<td��r|�d�d
||�|�d�d
�<Wn
t
�yYnw|
�td#d$�|�d%��q�Wd�n	1�s2wYtd&d'k�r�tdd(d��}d)d!�|��D�}Wd�n	1�sZwYtdd(d"��@}
|D]5}
|
�d*��r�|
�d+d�d��}td,|�}|
�td#d-�
td.|�|����qi|
�td#|
���qiWd�n	1�s�wYn~td&d/v�rtdd0d"��}
|
�td#|d%��Wd�n	1�s�wYtd1d2k�rtd#|�}d3}|d4�
|�7}td|�dd
k�rtd5|�d%���n*td&d6k�r.tdd7d"��}
|
�td#|d%��Wd�n	1�s)wYtd��r�tdd8d"��}
|
�td#|�d�d
d%��Wd�n	1�sWwYtdd9d"��}
|
�td#d�|�d�dd��d%��Wd�d:S1�s�wYd:S);z�
    Modify hostname

    .. versionchanged:: 2015.8.0
        Added support for SunOS (Solaris 10, Illumos, SmartOS)

    CLI Example:

    .. code-block:: bash

        salt '*' network.mod_hostname master.saltstack.com
    NFr�Zhostnamectlr�r�zplatform.is_smartosz/usr/bin/uname�unamezcheck-hostnamerz statusrr�stdoutrFzStatic hostnamerz%s was unable to get hostnameznetwork.get_hostnamerr�r�z{} set-hostname {}z(%s was unable to set hostname. Error: %s�stderrz{} -S {}rWzfiles.fopenz
/etc/hosts�rcS�g|]}td|��qS�zstringutils.to_unicoder��rTZ_lrrrr��r�z mod_hostname.<locals>.<listcomp>�wzstringutils.to_str�	�
Z	os_familyZRedHatz/etc/sysconfig/networkcSrr	r�r
rrrr��s�ZHOSTNAME�=zstringutils.is_quotedzHOSTNAME={1}{0}{1}
zstringutils.dequote)ZDebianZ	NILinuxRTz
/etc/hostnameZlsb_distrib_idZnilrtz/usr/local/natinst/bin/nirtcfgz: --set section=SystemSettings,token='Host_Name',value='{}'zCouldn't set hostname to: rrz/etc/mynamez
/etc/nodenamez/etc/defaultdomainT)r�endswithr"r<r=r�r�r�rrr!�	readlines�indexr\�writer^r r>�rstripr)r�Zhostname_cmdZ	uname_cmdZcheck_hostname_cmdr�rArBZ
o_hostnameZfp_Zhost_cZfh_r#Z	network_c�netZold_hostnameZ
quote_typeZstr_hostnameZnirtcfg_cmdrrr�mod_hostnameTs��
�
�

��


����
�"���������������
���"���
��rc
Ks(ddd�}|sd|d<d|d<|S|sd|d<d|d<|S|�d	d
�}|�dd�}|�d
d�}tjjj�|�s?tjjj�|�rB|}n	d�td|��}z6|dkrTt	j
}nt	j}d
}|rn|dkrct	j}	n
|dkrkt	j
}	nd}	nd}	t	�|||	d|�d\}}
}}}
Wnt	jy�d|d<d�|||�|d<|YSwzAt	�	||
|�}|�|�|dkr�t��}|�tj���d��|��}|�||
�|�d�\}}|��n
|�|
�|�d�Wn%t�y}zd|d<d�||
d||�|d<|WYd}~Sd}~wwd|d<d�||
d||�|d<|S)a�
    Test connectivity to a host using a particular
    port from the minion.

    .. versionadded:: 2014.7.0

    CLI Example:

    .. code-block:: bash

        salt '*' network.connect archlinux.org 80

        salt '*' network.connect archlinux.org 80 timeout=3

        salt '*' network.connect archlinux.org 80 timeout=3 family=ipv4

        salt '*' network.connect google-public-dns-a.google.com port=53 proto=udp timeout=3
    NrE�r��commentFr�z$Required argument, host, is missing.rz$Required argument, port, is missing.r1r(r$r,�familyz{}rr:Zipv4rdrz'Unable to resolve host {} on {} port {}z%s�r)z*Unable to connect to {} ({}) on {} port {}Tz/Successfully connected to {} ({}) on {} port {})r�rr�validaterZ	ipv4_addrZ	ipv6_addrr!rr�SOL_UDP�SOL_TCPr�AF_INET6�getaddrinfo�gaierror�
settimeout�hashlib�md5�update�datetime�now�strftime�	hexdigestr�recvfrom�close�connect�shutdown�	Exception)r#�port�kwargsr&r1r$r�addressZ__protoZ__family�socktypeZ_protoZgarbageZ_addressZsktZmd5h�msg�recvZsvr�excrrrr*�s�
�
����



�����r*cC�t�|�jS)z�
    Check if the given IP address is a private address

    .. versionadded:: 2014.7.0
    .. versionchanged:: 2015.8.0
        IPv6 support

    CLI Example:

    .. code-block:: bash

        salt '*' network.is_private 10.0.0.3
    )r�
ip_addressr��r�rrrr�M�r�cCr4)z�
    Check if the given IP address is a loopback address

    .. versionadded:: 2014.7.0
    .. versionchanged:: 2015.8.0
        IPv6 support

    CLI Example:

    .. code-block:: bash

        salt '*' network.is_loopback 127.0.0.1
    )rr5�is_loopbackr6rrrr8^r7r8cCr4)z�
    Returns the reversed IP address

    .. versionchanged:: 2015.8.0
        IPv6 support

    CLI Example:

    .. code-block:: bash

        salt '*' network.reverse_ip 172.17.0.4
    )rr5�reverse_pointerr6rrr�
reverse_ipos
r:c	Cs�ddi}d|��}td|�}t�d�}d}|��D]1}|�|�}|r<t|�d��||�d����d	d
�|<d|d<q|�	d�rDd
}q|�	d�rKd}q|dsh|�
�}|d�	d�rdd	�|dd��}||d<|S)zC
    Return network interface buffer information using ethtool
    r�Fz/sbin/ethtool -g rz^(.+):\s+(\d+)$zmax-r)rr��-Tz	maximums:z-maxz	settings:rErzsh:Nr)r"rXrYr<rZr�group�lower�replacerr=r^)	r�r&r%rA�pat�suffixrB�res�partsrrr�_get_bufsize_linuxs*


(


�rCcCs$tddkrtj�d�rt|�SiS)z�
    Return network buffer sizes as a dict (currently linux only)

    CLI Example:

    .. code-block:: bash

        salt '*' network.get_bufsize eth0
    rr��
/sbin/ethtool)r r��path�existsrCr�rrr�get_bufsize�s
rGc	Os�ddd�}d|}|s
|S|rdd�dd�|D��|d	<|Sd
}dD]}|�|�}|dur:|d|dt|�7}q#|s?|S||7}td
|�}|rQ||d	<|S|��|d	<d|d<|S)z=
    Modify network interface buffer sizes using ethtool
    Fz?Requires rx=<val> tx==<val> rx-mini=<val> and/or rx-jumbo=<val>rz/sbin/ethtool -G zUnknown arguments: r�cSsg|]}t|��qSr)r�)rT�itemrrrr��sz&_mod_bufsize_linux.<locals>.<listcomp>rrE)�rxZtxzrx-minizrx-jumboNrTr�)r^r�r�r"r�)	r��argsr.r&r%Zeargs�kw�valuerArrr�_mod_bufsize_linux�s2�
��rMcOs2tddkrtj�d�rt|g|�Ri|��SdS)z�
    Modify network interface buffers (currently linux only)

    CLI Example:

    .. code-block:: bash

        salt '*' network.mod_bufsize tx=<val> rx=<val> rx-mini=<val> rx-jumbo=<val>
    rr�rDF)r r�rErFrM)r�rJr.rrr�mod_bufsize�s
rNcs��dkr�dkr�durtd�����tddkr'tdd�s#t�}n:t�}n6tdd	kr1t�}n,td
dvr;t�}n"td
dvrEt�}ntd
d
vrOt�}ntd
dvrYt	�}ntd���sa|S�fdd�|D�}|S)a.
    Return currently configured routes from routing table

    .. versionchanged:: 2015.8.0
        Added support for SunOS (Solaris 10, Illumos, SmartOS)

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' network.routes
    rnroN�Invalid address family rr�r�r�rr�)rs�MacOSr�)rh)rr)r�r�csg|]
}|d�kr|�qS)r�r)rT�route�rrrr�szroutes.<locals>.<listcomp>)
rr rr�r�r�r�r�r�r�)rZroutes_r&rrRr�routes�s*rScCs|dkr|dkr|durtd|����t|�}i}tddkr,ddg|d<d	dg|d<ntd
dvs8tddvrCdg|d<dg|d<ntd
��g}|D]4}|rj|d||vritddkrd|d|krdqK|�|�qK|d|dvsz|d|dvr|�|�qK|S)a*
    Return default route(s) from routing table

    .. versionchanged:: 2015.8.0
        Added support for SunOS (Solaris 10, Illumos, SmartOS)

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' network.default_route
    rnroNrOrr�r�r�r�r�)rsrhrrrPr�r�r�r�rr�)rrSr r?)rZ_routes�
default_router&rQrrrrTs2

�
�rTcCs�tddkr3d|��}td|dd�}t�d�}|�|��d�}||�d	�|�d
�|�d�d�}|Stdd
kr�d|��}td|dd�}|dddd�}|��D]=}|�d�}d|dvrf|d��|d<d	|dvrt|d��|d	<d
|dvr�|d��|d
<t	d|d���|d<qQ|Stddkr�d|��}td|dd�}|dddd�}|��D]?}|�d�}d|dvr�|d��|d<d	|dvr�|d��|d	<d
|dvr�|d��|d
<d|dvr�|d��|d<q�|Stddk�rWd|��}td|dd�}|dddd�}|��D]D}|�d�}d|dv�r&|d��|d<d	|dv�r5|d��|d	<d
|dv�rD|d��|d
<d|dv�rS|d��|d<�q|St
d��)a}
    Return routing information for given destination ip

    .. versionadded:: 2015.5.3

    .. versionchanged:: 2015.8.0
        Added support for SunOS (Solaris 10, Illumos, SmartOS)
        Added support for OpenBSD

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' network.get_route 10.10.10.10
    rr�z
ip route get rTriz`(via\s+(?P<gateway>[\w\.:]+))?\s+dev\s+(?P<interface>[\w\.\:\-]+)\s+.*src\s+(?P<source>[\w\.:]+)rr�r��source)r�r�r�rUrz/usr/sbin/route -n get FNrFzroute torr�r�rrz
route -n get z
if addressr�zinterf addrr�)r r"rXrY�searchr<r<r=r�rr)r�r%rAZregexp�mr&rBrrr�	get_route>sz
��
	
�

�


�rXcCs|t�}g}t|�}t|�}|��D]*\}}d|vr;|dD]}|dd|�|kr:d|vr5|�|d�q|�|�qq|S)z�
    Retrieve the interface name from a specific CIDR

    .. versionadded:: 2016.11.0

    CLI Example:

    .. code-block:: bash

        salt '*' network.ifacestartswith 10.0
    rnr/rZlabel)r�r�rMr}r?)r�Znet_listZ	intfnames�pattern�sizeZifnameZifvalrnrrr�ifacestartswith�s
�r[cCs"|�d�}dd�|D�}d�|�S)z�
    Retrieve the hexadecimal representation of an IP address

    .. versionadded:: 2016.11.0

    CLI Example:

    .. code-block:: bash

        salt '*' network.iphexval 10.0.0.1
    rWcSsg|]}dt|��qS)z%02X)rrSrrrr��r�ziphexval.<locals>.<listcomp>rE)r=r^)r��aZhexvalrrr�iphexval�s

r]cC�td|||d�S)a
    .. versionadded:: 3001

    Returns a list of IPv4 networks to which the minion belongs.

    interface
        Restrict results to the specified interface(s). This value can be
        either a single interface name or a list of interfaces. Globbing is
        also supported.

    CLI Example:

    .. code-block:: bash

        salt '*' network.ip_networks
        salt '*' network.ip_networks interface=docker0
        salt '*' network.ip_networks interface=docker0,enp*
        salt '*' network.ip_networks interface=eth*
    znetwork.ip_networks�r�r��verboser�r_rrr�ip_networks���racCr^)a
    .. versionadded:: 3001

    Returns a list of IPv6 networks to which the minion belongs.

    interface
        Restrict results to the specified interface(s). This value can be
        either a single interface name or a list of interfaces. Globbing is
        also supported.

    CLI Example:

    .. code-block:: bash

        salt '*' network.ip_networks6
        salt '*' network.ip_networks6 interface=docker0
        salt '*' network.ip_networks6 interface=docker0,enp*
        salt '*' network.ip_networks6 interface=eth*
    znetwork.ip_networks6r_r�r_rrr�ip_networks6�rbrcc	s^d�d�t�}��fdd��t��}tjjjdtjj��d�}|�tjjjdtjj��d��zUt	j
�d��E���fdd	�|D�}t	j
�|�D],}z
|�
�}|rU|�|�WqGtys}z||}t�d
||�WYd}~qGd}~wwWd�n1s~wYWnty�}zt�d|�WYd}~nd}~wwt��|}t�d
|�dt|�iS)z�
    Return all known FQDNs for the system by enumerating all interfaces and
    then trying to reverse resolve them (excluding 'lo' interface).

    CLI Example:

    .. code-block:: bash

        salt '*' network.fqdns
    rr+c
s�t�t�dd�d�zt�t�|�d�gWStjyI}z%|jd��fvr0t	�
d||�nt	�d||�WYd}~dSWYd}~dSd}~wtyb}zt	�d||�WYd}~dSd}~ww)Nr,�i�rz Unable to resolve address %s: %s� Failed to resolve address %s: %s)
�time�sleep�random�randintrr�
gethostbyaddr�herror�errnor�r��errorr,)r��err)�HOST_NOT_FOUND�NO_DATArr�_lookup_fqdn,s����zfqdns.<locals>._lookup_fqdnF)r�Zinterface_datar/csi|]	}���|�|�qSr)Zsubmit)rTr/)rq�poolrrrxOs�zfqdns.<locals>.<dictcomp>reNzEException while creating a ThreadPoolExecutor for resolving FQDNs: %sz&Elapsed time getting FQDNs: %s seconds�fqdns)�setrfrrr�r�Z_get_interfaces�extendr��
concurrentZfuturesZThreadPoolExecutorZas_completedr�r#r,r�rmr��sorted)	rs�start�	addressesZfuture_lookupsZfutureZ
resolved_fqdnr3r/�elapsedr)rorprqrrrrssR����
���������rs)r
r)FFry)NFNN)NFN)NFF)W�__doc__�concurrent.futuresrvr$r!�loggingr�rhrXrrfZsalt.utils.decorators.pathrZsalt.utils.functoolsZsalt.utils.networkZsalt.utils.platformZsalt.utils.validate.netZsalt._compatrZsalt.exceptionsr�	getLogger�__name__r�r	rr'rDrQrgrjrlr�r�r�r�r�r�r�r�r�r�r�r�rZ
decoratorsrE�whichr�r�r�r�r��	functoolsZalias_functionr�r�r�r�r�r�r�r�r�r�r�r�r�rrrr*r�r8r:rCrGrMrNrSrTrXr[r]rarcrsrrrr�<module>s�


2'?-Q'52y3$$$$%2


%





!

d

,6|