예제 #1
0
def compacta(arquivos, local, ip):
    ''' Função que recebe uma tupla em "arquivos" com os nomes dos arquivos que
    serão compactados, compacta com bzip2, salva o arquivo compactado em
    "local", e retorna o nome do arquivo compactado.
    '''
    # Verifica se arquivos é uma tupla
    if not isinstance(arquivos, tuple):
        gera_log('Função "compacta" não recebeu tupla com nomes de aruivos')
        return 'Erro: Função deve receber uma tupla'

    # Formata o nome do arquivo de backup
    nomebackup = 'backup-{}.tar.bz2'.format(\
                                datetime.now().strftime('%Y-%m-%d_%H:%M:%S'))

    # Ajusta o caminho do diretório onde o backup será armazendado localmente,
    # completando com barra "/" no final se necessário
    if not local.find('/', -1) == len(local) - 1:
        local = '{}/'.format(local)

    # Cria o arquivo compactado
    try:
        with tarfile.open('{0}{1}'.format(local, nomebackup), 'w:bz2') as tbf:
            for i in arquivos:
                for j in glob.iglob(i):
                    tbf.add(j)
    except IOError as msgError:
        gera_log(msgError)
        return msgError

    return '{0}{1}'.format(local, nomebackup)
예제 #2
0
def cria_socket(ip, porta):
    ''' Função que cria um socket para uma conexão criptografada com SSL.
    Recebe, como parâmetros, o endereço "ip" do host alvo do backup e o número
    da "porta" que o host alvo utiliza para receber solicitações do servidor.
    Retorna um objeto que identifica o socket a ser utilizado em conexões
    criptografadas.
    '''
    # Cria  um socket
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except:
        gera_log('Erro ao criar socket')

    # Acrescenta criptografia com SSL ao socket criado
    s_ssl = ssl.wrap_socket(s, suppress_ragged_eofs=False)

    # Tenta estabelecer conexão com o host alvo
    try:
        s_ssl.connect((ip, int(porta)))
    except:
        gera_log('Erro ao tentar estabelecer conexão com {}'.format(ip))

    gera_log('Conexão estabelecida com {}'.format(ip))

    return s_ssl
예제 #3
0
def cria_socket(porta, chave_privada, certificado):
    ''' Função que cria um socket para uma conexão criptografada com SSL.
    Recebe, como parâmetros, o número da "porta" que será utilizado como
    endereço para se contactar o socket; a localização da chave privada em
    "chave_privada"; e a localização do "certificado". Retorna um objeto que
    identifica o socket a ser utilizado em conexões criptografadas.
    '''
    # Cria  um socket
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
        s.bind(('', int(porta)))
        s.listen(1)
    except:
        gera_log('Erro ao criar socket')
        exit()

    # Acrescenta criptografia com SSL ao socket criado
    try:
        s_ssl = ssl.wrap_socket(s,
                                keyfile=chave_privada,
                                certfile=certificado,
                                server_side=True,
                                ssl_version=ssl.PROTOCOL_TLSv1,
                                suppress_ragged_eofs=False)
    except:
        gera_log('Erro ao criar conexão criptografada')
        exit()

    gera_log('Aguardando conexão...')

    return s_ssl