File: //usr/lib/python3/dist-packages/ufw/__pycache__/util.cpython-39.pyc
a
���_ � @ sF d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl Z ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZ ddlmZmZ dZdZg d�Zg d�Zd d
gZdd� Zd
d� Zdd� Zdd� Zdd� Zdhdd�Zdd� Z dd� Z!dd� Z"dd� Z#did!d"�Z$d#d$� Z%d%d&� Z&d'd(� Z'djd)d*�Z(d+d,� Z)ej*d fd-d.�Z+d/d0� Z,d1d2� Z-d3d4� Z.d5d6� Z/e �0� fd7d8�Z1e �0� fd9d:�Z2d;d<� Z3d=d>� Z4d?d@� Z5dAdB� Z6dCdD� Z7dEdF� Z8dGdH� Z9dIdJ� Z:dkdKdL�Z;dldMdN�Z<dOdP� Z=dmdQdR�Z>dSdT� Z?dUdV� Z@dWdX� ZAdYdZ� ZBd[d\� ZCd]d^� ZDd_d`� ZEdadb� ZFdnddde�ZGdfdg� ZHdS )oz"util.py: utility functions for ufw� )�print_functionN)�reduce)�mkstemp�mktempF)�tcp�udp�ipv6�esp�ah�igmp�gre)r r r
r r r r c C s� d}zt �| � W n ty& � Y n0 zt �| d� d}W n tyN Y n0 z"t �| d� |dkrld}nd}W n ty� Y n0 |S )z8Get the protocol for a specified port from /etc/services� r r �any)�socket�
getservbyname� Exception)�port�proto� r �*/usr/lib/python3/dist-packages/ufw/util.py�get_services_proto. s$ r c C s~ d}d}| � d�}t|�dkr,|d }d}nJt|�dkrf|d }|d }|tv rvtd| �}t|��ntd�}t|��||fS ) zParse port or port and protocolr
�/� r r � zInvalid port with protocol '%s'zBad port)�split�len�portless_protocols�_�
ValueError)Zp_strr r �tmp�err_msgr r r �parse_port_protoH s
r! c C s� t jstd� dS t| �dks*t�d| �s.dS | �d�}zt �t j|d � W n t yb Y dS 0 t|�dkrtdS t|�dkr�t
|d d �s�dS d S )
zVerifies if valid IPv6 addressz"python does not have IPv6 support.F�+ z^[a-fA-F0-9:\./]+$r r r r T)r �has_ipv6�warnr �re�matchr � inet_pton�AF_INET6r �_valid_cidr_netmask��addr�netr r r �valid_address6\ s
r- c C s� t | �dkst�d| �sdS | �d�}z*t�tj|d � t|d d�sNW dS W n tyd Y dS 0 t |�dkrvdS t |�dkr�t |d d�s�dS dS ) zVerifies if valid IPv4 address� z^[0-9\./]+$Fr r r r T)
r r% r&