Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: sp26 en 6 Diciembre 2006, 18:41 pm



Título: descargar ftp
Publicado por: sp26 en 6 Diciembre 2006, 18:41 pm
Quisiera saber de una form que cree un Archivo txt (indicando los datos en el codigo mismo) y lo suba a un servidor FTP de manera silenciosa.   Tambien que descargue un archivo ftp

Me habian dicho que con Winsock, pero estuve redondeando y al final no encontre como  :-( Si hay otra manera de hacerlo seria mejor tambien ;).


Título: Re: descargar ftp
Publicado por: jrhomer en 7 Diciembre 2006, 09:15 am
Espero que esto te sirva. Cuentanos a ver como te ha ido al probarlo.



Private Declare Function GetShortPathName Lib "kernel32" Alias _
    "GetShortPathNameA" (ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
    ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''' FTP ''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Esta API es para que de una ruta WIndows, me devuelva una ruta MSDOS,
'ya que el comando FTP del prompt no reconoce rutas largas

Public Function RutaDos(strFileName As String) As String

    Dim lngRes As Long, strPath As String
    strPath = String$(165, 0)
    lngRes = GetShortPathName(strFileName, strPath, 164)
    RutaDos = Left$(strPath, lngRes)
   
End Function


''''''''''''''''''''''''''''''''''
''''''' subir fichero ''''''''''''
''''''''''''''''''''''''''''''''''


Function PutFichero()
On Error GoTo ERROR

    Dim Retval
    'escribimos el fichero ftp.txt que hara toda la labor
    If Len(Dir("C:\ftp.txt")) <> 0 Then Kill "C:\ftp.txt"
   
    Dim StrFtp As String
    Dim StrUsuario As String
    Dim StrPassword As String
    Dim strCarpetaRemota As String
    Dim StrRutalocalFichero As String
   
 
    StrFtp = "ftp.sitio.com"
    StrUsuario = "sitio.com"
    StrPassword = "contraseña"
    strCarpetaRemota = "html/BD/"
    StrRutalocalFichero =  "BD.zip"
   
    ' subir al servidor
    NumeroArchivo = FreeFile
    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "put " & RutaDos(StrRutalocalFichero)
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents

'    Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)
    Call ExecuteAndWait("ftp -s:C:\ftp.txt")
   
    Exit Function

ERROR:
End Function



''''''''''''''''''''''''''''''''''
''''''' bajar fichero ''''''''''''
''''''''''''''''''''''''''''''''''


Function GetFichero()
On Error GoTo ERROR

    Dim Retval

    Dim StrFtp As String
    Dim StrUsuario As String
    Dim StrPassword As String
    Dim strCarpetaRemota As String
    Dim StrFicheroRemoto As String
   
    StrFtp = "ftp.sitio.com"
    StrUsuario = "sitio.com"
    StrPassword = "contraseña"
    strCarpetaRemota = "html/BD/"
    StrFicheroRemoto = "BD.ZIP"
   
    ' bajar el fichero
    NumeroArchivo = FreeFile
    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "binary"
    Print #NumeroArchivo, "get " & StrFicheroRemoto & " " & _
            RutaDos(Directorio) & "BD.zip"
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents

'    Retval = Shell("ftp -s:C:\ftp.txt", vbNormalFocus)
    Call ExecuteAndWait("ftp -s:C:\ftp.txt")
   
    If Len(Dir("C:\ftp.txt")) <> 0 Then Kill "C:\ftp.txt"
   
    ' cambiar nombre, para tener una cópia de seguridad
    NumeroArchivo = FreeFile
    Open "C:\ftp.txt" For Append As #NumeroArchivo
    Print #NumeroArchivo, "Open " & StrFtp
    Print #NumeroArchivo, StrUsuario
    Print #NumeroArchivo, StrPassword
    Print #NumeroArchivo, "cd " & strCarpetaRemota
    Print #NumeroArchivo, "rename " & StrFicheroRemoto & " " & _
            "BD_" & FECHA & ".zip"
    Print #NumeroArchivo, "bye"
    Close #NumeroArchivo
    DoEvents

    Call ExecuteAndWait("ftp -s:C:\ftp.txt")
   
    Exit Function

ERROR:
End Function


Título: Re: descargar ftp
Publicado por: rixi15 en 7 Diciembre 2006, 11:58 am
y en el form_load k se pone¿?


Título: Re: descargar ftp
Publicado por: Castord en 7 Diciembre 2006, 13:32 pm
WTF!

ese codigo no hace nada interesante...


Título: Re: descargar ftp
Publicado por: sp26 en 7 Diciembre 2006, 21:06 pm
¿Porque no hace nada interesante? Tienes algun codigo mejor? si lo tienes, seria bueno que lo compartas con nosotros  ;)



Gracias Jrhomer, probare tu codigo ;).

aunque no entiendo en la parte que dices:.

StrRutalocalFichero =  "BD.zip"


Tambien no dejaste claro como crear un archivo *.txt, de igual manera muchas gracias, lo probare .


Título: Re: descargar ftp
Publicado por: rixi15 en 7 Diciembre 2006, 21:52 pm
ami no me funciona ay k ponmer algo en el form load¿?


Título: Re: descargar ftp
Publicado por: sp26 en 8 Diciembre 2006, 23:22 pm
haber, tampoco me funciona.

intentare cis=3


Título: Re: descargar ftp
Publicado por: sp26 en 10 Diciembre 2006, 02:47 am
 :huh:


Título: Re: descargar ftp
Publicado por: jrhomer en 12 Diciembre 2006, 16:32 pm
El código fuinciona perfectamente, lo tengo funcionando en aplicaciones y no hay problema.

Para descargar un archivo llama a:
Código:
GetFichero

Para subir una archivo al servidor FTP llama a:
Código:
PutFichero()

Las funciones son personales.... no son para que las copies y ya tenga que funcionar, mirar a ver que modificaciones teneis que .hacer, pero ese código funciona perfectamente.

Citar
aunque no entiendo en la parte que dices:.

StrRutalocalFichero =  "BD.zip"
BD.zip es el archivo que subo y bajo del servidor FTP y se encuentra en la ruta que indico .... imagina que pone C:\archivo.zip. En MI caso el archivo BD.zip se encuentra en el mismo directorio donde ejecuto la aplicación, es por eso que no hay más ruta.