Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Kizar en 11 Julio 2005, 00:34 am



Título: Transferencia de archivos, AYUDA
Publicado por: Kizar en 11 Julio 2005, 00:34 am
Hola a todos, pues el problema es que en el trayano que estoy haciendo al enviar los archivos no les envia enteros, solo envia un poco del principio, aqui os dejo el codigo a ver si alguno encontrais el problema, por que llo llevo mas de una semana y no lo e encontrao.

Nota : "vbParseData" lo utilizo para partir los archivos a la llegada seria igual que lo que usais muchos "|" .

Código:
Dim i As Long
Dim Arch As String
Dim Buffer as string
Arch = "C:\stub.log"
Buffer = Space$(25000)
   
    Open Arch For Binary Access Read As #1
     
    For i = 1 To FileLen(Arch) / 25000 'hacemos la division de las veces que tendra que leer y enviar
    Get #1, , Buffer 'leemos
    Winsock_server.SendData "archi" & vbParseData & Buffer
    DoEvents
   
    If FileLen(Arch) - Loc(1) <= 25000 Then 'como el for no utiliza los  decimales enviamos los restos
    Buffer = Space$(FileLen(Arch) - Loc(1)) 'redimensianamos la variable con el num de bites que faltan
    Get #1, , Buffer 'leemos
    Winsock_server.SendData "archi" & vbParseData & Buffer
    DoEvents
    End If
    Next i

    Winsock_server.SendData "fin"
    Close #1

Salu2


Título: Re: Transferencia de archivos, AYUDA
Publicado por: maxnet en 12 Julio 2005, 07:25 am

creo que 25000 es mucho prueba con 8000 o menos

o puede ser que lo envias muy rapido
quita doevents y create una pausa de uno milisegundos

saludos!!!


Título: Re: Transferencia de archivos, AYUDA
Publicado por: Slasher-K en 13 Julio 2005, 02:05 am
El problema no es tu RAM sino que el ancho de banda no soporta tanto, cuando se envían datagramas por la web no deben ser muy grandes porque al pasar por tantos servidores los datos se podrían perder o peor, pueden llegar corrompidos.

Primero intenta envíar menos cantidad de datos, si no funciona se buscará otra solución.

Pero igualmente esa forma de leer el archivo es media inestable, te dejo una alternativa.

Código:
Option Explicit

Private Type FileInfo
  Filename      As String
  FileSize      As Long
  TotalPieces   As Long
  BytesPerPiece As Long
  ByteRemaining As Long
End Type

Private Function ParseFile(Filename As String, BytesPerPiece As Long) As FileInfo
  With ParseFile
    .Filename = Filename
    .FileSize = FileLen(Filename)
    .TotalPieces = .FileSize \ BytesPerPiece
    .BytesPerPiece = BytesPerPiece
    .ByteRemaining = .FileSize Mod .ByteRemaining
  End With
End Function

Private Function CropFile(FileSpec As FileInfo) As Single
        Dim hFile%, snTime!
        Dim sData$, i&

  snTime = Timer
 
  With FileSpec
    hFile = FreeFile
   
    Open .Filename For Binary Lock Read Write As #hFile
   
    sData = String$(.BytesPerPiece, 0)
   
    For i = 1 To .TotalPieces
      If i < .TotalPieces Then
        Get #hFile, , sData
      Else
        sData = String$(.ByteRemaining, 0)
       
        Get #hFile, , sData
      End If
     
      'Luego acá se enviarían los datos.
      '
    Next
  End With
End Function

En resumen es lo mismo pero un poco más estructurado. Y si usas la API es dos veces más rápido.

Saludos.


Título: Re: Transferencia de archivos, AYUDA
Publicado por: Slasher-K en 16 Julio 2005, 00:49 am
Intenta hacer una pausa entre cada llamada a Send. Por ejemplo con el siguiente código (incorporalo al procedimiento).

Código:
      Dim snTime!

  snTime = Timer

  Do While (Time - snTime) < .25
   'Espera 0.25 segundos.
  Loop

  Call Winsock_server.SendData("archi" & vbParseData & Buffer)

Saludos.


Título: Re: Transferencia de archivos, AYUDA
Publicado por: Slasher-K en 16 Julio 2005, 04:54 am
Ah me olvidé de ese detalle en el code que puse antes ;D. La forma de solucionar eso sería asi:

Código:
Tam = 1024
Trozos = FileLen(Arch) / Tam
Falta = FileLen(Arch) Mod Falta

If Falta > 0 Then Trozos = Trozos + 1

Saludos.


Título: Re: Transferencia de archivos, AYUDA
Publicado por: Slasher-K en 17 Julio 2005, 00:16 am
La instrucción Mod devuelve el resto de una división, por eso la uso para obtener lo que falta del archivo.

Saludos.


Título: Re: Transferencia de archivos, AYUDA
Publicado por: sch3m4 en 17 Julio 2005, 09:33 am
por si a alguno le sirve, un pequeño tuto  ;)

http://lympex.sosvulnerable.net/resources/textos/programacion/envio_archivos_vb.htm


Título: Re: Transferencia de archivos, AYUDA
Publicado por: Thaorius en 18 Julio 2005, 15:59 pm
Acabo de mirar el enlace y no veo fallas evidentes. Comproba que el programa se conecta.

Saludos


Título: Re: Transferencia de archivos, AYUDA
Publicado por: sch3m4 en 19 Julio 2005, 14:49 pm
el código funciona  :)


Título: Re: Transferencia de archivos, AYUDA
Publicado por: -Xenon- en 19 Julio 2005, 18:54 pm

lo que necesitas lo esplico en la primera pagina de este hilo http://foro.elhacker.net/index.php/topic,57545.0.html

algo rustico, pero funciona 100%

no tiene perdida, en la primera pagina, el 4 post que puse, si no me equivoco!

espero te sirva, suerte


Título: Re: Transferencia de archivos, AYUDA
Publicado por: caro.13 en 22 Julio 2005, 22:53 pm
oye amigo,

entra como usuario a este foro y dale en buscar

alli escribe "Troyano en visual basic" sin las comillas y alli te sale el codigo de un troyano en visual basic, que tiene lo que necesitas y mas...

chito y porfa busca tambien ayuda con el Mscomm... y si puedes solucionalo.


Título: Re: Transferencia de archivos, AYUDA
Publicado por: sch3m4 en 26 Agosto 2005, 11:46 am
lo mejor sería crear dos conexiones. Una para el envío de los datos del archivo (nombre, tamaño, etc) y otra para el envío del archivo. Es lo que hace el protocolo Ftp


Título: Re: Transferencia de archivos, AYUDA
Publicado por: sch3m4 en 26 Agosto 2005, 12:16 pm
vaya.... perdona ::)


Título: Re: Transferencia de archivos, AYUDA
Publicado por: programatrix en 26 Agosto 2005, 13:18 pm
Hace unos días hice una función que te puede servir para enviar ficheros (pequeños). No la he probado siquiera espero que funcione.
Código:
Public Function enviar(ruta As String, fichero As String, extension As String)
Dim direccion As String
Dim datosfichero As String
direccion = ruta & fichero & extension
datosfichero = Space(EOF(1))
Open direccion For Binary Access Read As #1
Get #1, , datosfichero
Close #1
Winsock1.SendData datosfichero
End Function
Se llama así:
Código:
enviar "C:\","imagen",".gif"
Saludos  ;)