-Detectar conexion a internet
-Conectar al Ftp
-Subir Archivo, si existe reemplazar.
Para seguir una logica, intentar conectar al Ftp sin internet es evidente que no se podra, esto es solo para dejar un codigo simple de aplicar a cualquier software y ademas efectivo. Para establecer una resolucion de que si hay o no internet usamos:
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent$, ByVal lAccessType&, ByVal sProxyName$, ByVal sProxyBypass$, ByVal lFlags&) As LongLuego para realizar la conexion con el Ftp usamos:
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession&, ByVal sServerName$, ByVal nServerPort%, ByVal sUserName$, ByVal sPassword$, ByVal lService&, ByVal lFlags&, ByVal lContext&) As LongPor ultimo para subir el archivo utilizaremos la ya mencionada:
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hConnect&, ByVal lpszLocalFile$, ByVal lpszNewRemoteFile$, ByVal dwFlags&, ByVal dwContext&) As BooleanEn un modulo que tengo llamado mdlFunciones tengo el siguiente codigo que lo dejo comentado a continuacion:
Option Explicit Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hConnect&, ByVal lpszLocalFile$, ByVal lpszNewRemoteFile$, ByVal dwFlags&, ByVal dwContext&) As Boolean Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession&, ByVal sServerName$, ByVal nServerPort%, ByVal sUserName$, ByVal sPassword$, ByVal lService&, ByVal lFlags&, ByVal lContext&) As Long Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent$, ByVal lAccessType&, ByVal sProxyName$, ByVal sProxyBypass$, ByVal lFlags&) As Long Type ConnData 'estructura de datos para conectar User As String Pass As String NameFTP As String ' ejemplo "ftp.microsoft.com" End Type Public Function IniConex(Usuario$, Password$, NombreServer$) As Boolean 'funcion que si da true es que hay internet y se logro IniConex = False 'conectar al Ftp con exito TestConexion = InternetOpen(vbNullString, 0, vbNullString, vbNullString, 0) If TestConexion = 0 Then MsgBox "No hay conexion a internet", vbOKOnly + vbCritical, "Atencion: Error" Exit Function Else IniConex = True reConFtp = InternetConnect(TestConexion, NombreServer, 21, Usuario, Password, 1, IIf(True, &H8000000, 0), 0) If reConFtp Then Else MsgBox "datos erroneos, verifique pass, user y nombre de ftp", vbOKOnly + vbCritical, "Error" IniConex = False End If End If End Function Public Sub ArchivoSub(unaRutaArchivo$, ArchivoRemm$) 'sube el archivo especificado en la variable unaRutaArchivo Dim UpFtp As Boolean UpFtp = FtpPutFile(reConFtp, unaRutaArchivo, ArchivoRemm, 1, 0) If UpFtp Then MsgBox "archivo subido correctamente", vbOKOnly + vbInformation, "Finalizado" Else MsgBox "error al subir", vbOKOnly + vbCritical, "Atencion: Error" End If End SubLuego en otro modulo llamado mdlVariables tengo este codigo:
Option Explicit Public TestConexion& Public reConFtp& Public DatosConexion As ConnDataEn el formulario principal, que contiene los siguientes controles: -5 cajas de texto (textBox) -2 botones de comando (commandbutton) Con el siguiente codigo:
Option Explicit Private Sub cmdConectar_Click() With DatosConexion .User = txtUser.Text .Pass = txtPass.Text .NameFTP = txtNombreFTP.Text If IniConex(.User, .Pass, .NameFTP) = True Then MsgBox "conecto xD" Else MsgBox "revise los datos de conexion, no se pudo conectar", vbOKOnly + vbCritical, "Atencion: Error" End If End With End Sub Private Sub cmdSubir_Click() On Error GoTo errsub ArchivoSub txtOrigen.Text, txtDestinoFTP Exit Sub errsub: If Err.Number = 32755 Then Exit Sub End Sub Private Sub Form_Unload(Cancel As Integer) End End SubEl proyecto es sencillo, se "llama" de manera simple, y es eficaz por ejemplo cuando queremos salvar informacion sin tener que proceder a realizar acciones extras para el guardado de datos. Este ejemplo fue proporcionado y programado con exclusividad para un colega de elhacker.net en la realizacion de un keyylogger, se mostro este codigo como base y entendimiento sobre el guardado de un archivo de texto basico en un servidor Ftp. Espero sea de utilidad, con los permisos necesarios de lararich(nickname de elhacker.net) se expuso el codigo en el blog. Descarga desde media fire del codigo fuente:
Enlace compartido de el foro de el hacker.net:
Saludos a todos.