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)
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
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