Example #1
0
def send_file(connection_socket):
	try:
		# Abrindo arquivo para enviar
		arquivo = open("backup{0}{1}{2}".format(getFileSeparator(), getNameFile(), ".zip"), "rb")

		# Lendo os primeiros bytes do arquivo
		l = arquivo.read(1024)

		print("Iniciando envio do arquivo de backup...")
		# Continua enviando equanto houver dados do arquivo para ser lido e enviado.
		while(l):
			connection_socket.send(bytes(l))
			l = arquivo.read(1024)

		print("Envio finalizado!")
		# Fechando o arquivo
		arquivo.close()

	except (ConnectionResetError):
		gera_log(connection_log,"Erro no envio do(s) arquivo(s). Conexão reiniciada pelo cliente.")
		connection_socket.close()
	except (ConnectionAbortedError):
		gera_log(connection_log,"Erro no envio do(s) arquivo(s). Conexão abortada pelo cliente.")
		connection_socket.close()
	except (ConnectionRefusedError):
		gera_log(connection_log,"Erro no envio do(s) arquivo(s). Conexão recusada pelo cliente.")
		connection_socket.close()
Example #2
0
def get_zip_files():
	# Obtém o arquivo zip.
	zf = zipfile.ZipFile("backup{0}{1}{2}".format(getFileSeparator(), getNameFile(), ".zip"))

	# Obtém lista de arquivos do zip.
	arquivos_list = zf.namelist()

	# Retorna lista de arquivos do arquivo zip.
	return arquivos_list
Example #3
0
def get_zip_md5():
	# Abrindo arquivo para obter o checksum md5
	arquivo = open("{0}{1}{2}{3}".format("backup",getFileSeparator(), getNameFile(), ".zip"), "rb")

	# Obtendo hash md5 do conteudo do arquivo
	checksum_md5 = hashlib.md5(arquivo.read()).hexdigest()

	# Fechando o arquivo
	arquivo.close()

	# retornando o checksum_md5 do conteudo arquivo zip
	return checksum_md5
Example #4
0
def get_property():
	# Armazenando em um dicionário os dados.
	dados = {
		"ip" : "{0}".format(get_ip_address()), # ip do host
		"porta": server_port, # porta de conexão
		"name_file": "{0}".format(getNameFile()), # nome do arquivo
		"checksum_md5": get_zip_md5(), # checksum_md5 do arquivo zip.
		"date": time.strftime("%d-%m-%Y"), # data de envio
		"hour": time.strftime("%H-%M-%S") # hora de envio
	}

	# Retornando dicionário com os dados.
	return dados
Example #5
0
def main():
	# Inicializando o connection_socket como nulo.
	connection_socket = None

	try:
		# Verifica se as pastas de log e backup existem.
		checkPath("log")
		checkPath("backup")

		# Cria o arquivo de backup.
		createZipFile("files")

		# Gera a senha de conexão
		key_connect = hashlib.md5("123456".encode("utf-8").strip()).hexdigest()

		# Obtém a conexão com o servidor de backup, caso contrário recebe None.
		connection_socket = get_connection()

		# Verificando se a conexão foi estabelecida.
		if (connection_socket):
			try:
				# recebendo a chave de conexão do cliente.
				key_server = connection_socket.recv(1024).decode("utf-8")

				# Gravando a informação sobre a conexão no histórico.
				history_data = "\n[{0} - {1}]: {2}".format(get_data(), get_hora(), "Conexão estabelecida com sucesso!")
				gera_log(history_log, history_data)

				#print ("Senha do Server: " + keyServer)

				# Verificando a chave do servidor de backup
				if (key_connect == key_server):
					if (os.path.exists("{0}{1}{2}{3}".format("backup",getFileSeparator(), getNameFile(), ".zip"))):
						# Enviando mensagem de acesso autorizado para o servidor de backup.
						connection_socket.send(bytes("Conectado!".encode("utf-8").strip()))

						# Obtendo propriedades do host e dos arquivos
						dados = get_property()

						# Transformando o dicionário para um objeto json para ser enviado ao servidor de backup.
						json_dados = json.dumps(dados)

						# Enviando os dados do host e do arquivo para o servidor de backup.
						send_property(connection_socket, json_dados)

						# Enviando o arquivo zip para o servidor de backup
						send_file(connection_socket)

						if(checkPath("log")):
							logData = "\n[{0} - {1} - {2}:{3}]\n\t{4}".format(get_data(), get_hora(), dados["ip"], dados["porta"], '\n\t'.join(get_zip_files()))

							# Gera o arquivo de relatório.
							gera_log(connection_log, logData)
					else:
						print("Não foi encontrado arquivo de backup.")

				# Finalizando a conexão
				connection_socket.close()

				# Gravando no log de conexões.
				history_data = "\n[{0} - {1}]: {2}".format(get_data(), get_hora(), "Conexão finalizada!")
				gera_log(history_log, history_data)

			except (socket.herror, socket.gaierror, socket.error):
				history_data = "\n[{0} - {1}]: {2}".format(get_data(), get_hora(), "Ocorreu um erro no estabelecimento da conexão.")
				if(checkPath("log")):
					gera_log(history_log, history_data)
			except (socket.timeout):
				history_data = "\n[{0} - {1}]: {2}".format(get_data(), get_hora(), "O tempo limite para estabelecimento de conexão foi atingido.")
				if(checkPath("log")):
					gera_log(history_log, history_data)


	except (KeyboardInterrupt, SystemExit):
		# verificando se há conexão estabelecida pra fechar.
		if(connection_socket != None):
			connection_socket.close()