Página 1 de 1

Envio de archivos por FTP y comprobarlos

Publicado: 10 Abr 2010, 22:24
por kemazonico
Pues bien, este es un pequeño programa que construi para enviar archivos por FTP algo pesados (10GB) y poder comprobar su integridad ya que son muy importantes (Backups de Bases de Datos.)

El programa consta de dos partes una se ejecuta localmente y otra en el equipo remoto (FTP) ya que se obtiene el valor SHA1 correspondiente al archivo que se envia y de esta manera se compara con el archivo local. El programa envia mensajes via Twitter sobre el resultado del envio de estos archivos para su seguimiento en caso de tener algun inconveniente.

Para mi es funcional, pero mis conocimientos en programacion son casi/absolutamente nulos, se que en este foro hay personas que podrian ajustarlo y mejorarlo y me gustaria aprender de ustedes (mi codigo es un caos).



Les pongo el codigo de los dos programas (local y remoto).

Código: Seleccionar todo

#include <FTPEx.au3>
#include <Crypt.au3>

; #INDEX# =======================================================================================================================
; Titulo ........: BksFTP
; Idioma ........: Español
; Descripción ...: Envia archivos por FTP y comprueba su integridad, envia alertas sobre los resultados.
; Autor .........: Alfredo Santana <kemazonico>
; Notas .........: Herramientas usadas <CURL> y <PSEXEC>
; ===============================================================================================================================


;;Busqueda de archivos
$search = FileFindFirstFile("F:\RESPALDOS\*.rar")
$MsgOk= '"@_a El bk subio correctamente "'							;;Mensaje que indica que el proceso culmino satisfactoriamente.
$MsgError= '"@_a El bk fallo o no se comprobo correctamente "'		;;Mensaje que indica que el proceso fallo.

;;Si la busqueda no encuentra resultados, se emitira un mensaje
If $search = -1 Then
	MsgBox(0, "Error", "No hay backups para subir ó no se comprimieron!")
	Exit
EndIf

While 1 
	
	$files = FileFindNextFile($search)
	If @error Then ExitLoop
		
$file = "F:\RESPALDOS\" & $files		;;Ruta local donde se encuentran los archivos a subir
$rfile = $files							;;Ruta remota, el mismo nombre del archivo de busqueda.
$server = '10.0.1.14'					;;Direccion del servidor
$username = 'usuario'					;;Usuario del FTP con permisos de escritura.
$pass = 'password'						;;Contraseña

$Open = _FTP_Open('MyFTP Control')
$Conn = _FTP_Connect($Open, $server, $username, $pass)

_FTP_FilePut($conn, $file, $rfile, $FTP_TRANSFER_TYPE_BINARY)

_FTP_Close ($Open)




$sFile= "F:\RESPALDOS\" & $files		;;Ruta del archivo a comprobar con el algoritmo SHA1
$iALG_ID = $CALG_SHA1

$bDigest= _Crypt_HashFile($sFile, $iALG_ID)
IniWrite ("\\10.0.1.14\e$\Finmas\otros\SHA1_Data.ini", "ARCHIVO", "archivo", $files) ;;Se escribe el valor SHA1 previamente obtenido del archivo a transferir


;;Corremos un proceso en el equipo remoto para obtener el valor SHA1 del archivo previemante subido y de esta manera validar su integridad.
;;Usaremos la herramienta de Microsoft PSEXEC para correr el proceso "c:\Verificaintegridadbackup.exe" remotamente.

$PCName1 = "\\10.0.1.14 " 						;;Direccion IP del equipo remoto.

$Comando = "c:\verificaintegridadbackup.exe "	;;Ejecutable

$Pram1 = $Comando &$PCName1						

$CommandLine = "RUN " & $Pram1
RunWait ( @ComSpec & " /t:9f /c" & $CommandLine )	;;Corre el proceso remotamente.

$bDigest_ = IniRead ("\\10.0.1.14\e$\Finmas\otros\SHA1_Data.ini", "SHA1", "sha1", "")		;;Obtiene el valor SHA1 de un archivo INI que fue grabado con el proceso "Verificaintegridadbackup.exe"

if $bDigest = $bDigest_ then					;;Si los valoser SHA1 del archivo local y el archivo enviado por FTP al equipo remoto coinciden, aparece un mensaje indicandolo
	MsgBox (0, "Finamigo", "El archivo se comprobo exitosamente", 10)
	RunWait ('curl --basic --user usuariotwitter:passtwitter --data status=' & $MsgOk & $files & " a las:" & @HOUR & ":" & @MIN & ":" & @SEC &' http://twitter.com/statuses/update.xml > NUL')	;;Nos envia un mensaje via Twitter
	FileMove ("F:\RESPALDOS\" & $files, "k:\RESPALDOS\") ;; Mueve el archivo que ya se subio a una unidad que contendra estos respaldos dentro del equipo local.
	
ElseIf $bDigest <> $bDigest_ Then				;;Si los valoser SHA1 del archivo local y el archivo enviado por FTP al equipo remoto NO coinciden, aparece un mensaje indicandolo.
	MsgBox (0, "Finamigo", "El archivo que se subio esta corrupto, se enviara un reporte sobre el problema.", 10)
	RunWait ('curl --basic --user usuariotwitter:passtwitter --data status=' & $MsgError & $files & " a las:" & @HOUR & ":" & @MIN & ":" & @SEC &' http://twitter.com/statuses/update.xml > NUL') ;;Nos envia un mensaje via Twitter
	
Else
	MsgBox (0, "Finamigo", "Ocurrio un error inesperado", 10)
	EndIf
	
	
	
WEnd

FileClose($search)
Programa remoto:

Código: Seleccionar todo

#include <Crypt.au3>

$file = IniRead ( "e:\Finmas\otros\SHA1_Data.ini", "ARCHIVO", "archivo", "")
$sFile= "F:\BKTRIARA\" & $file
$iALG_ID = $CALG_SHA1

#Include <Crypt.au3>
$bDigest= _Crypt_HashFile($sFile, $iALG_ID)
IniWrite ("e:\Finmas\otros\SHA1_Data.ini", "SHA1", "sha1", $bDigest)

Re: Envio de archivos por FTP y comprobarlos

Publicado: 12 Abr 2010, 03:05
por Rupert.25
Hola. Gracias por compartir el programa, se vé muy util e interesante, lo bajaré a ver que aprendemos de esto.

Gracias de antemano y felicidades, se vé que eres bueno en la programación

Re: Envio de archivos por FTP y comprobarlos

Publicado: 12 Abr 2010, 08:30
por Ximorro
Una sugerencia... quita la contraseña del programa, quizás quieras mantener eso en secreto... :smt003

Entiendo que es un programa para tu uso exclusivo, pero normalmente es buena idea parametrizar algunas cosas, como esos PATH puestos a piñón fijo, o la contraseña, que se puede pedir al usuario cada vez.

Buen trabajo.

Re: Envio de archivos por FTP y comprobarlos

Publicado: 15 Abr 2010, 00:11
por kemazonico
Gracias por sus comentarios, aunque es un servidor local, uno nunca sabe...