Transferencia de Archivos: Participamos todos?

Iniciado por yovaninu, 25 Mayo 2007, 05:52 AM

0 Miembros y 1 Visitante están viendo este tema.

yovaninu

Hola a todos, hace tiempo por aca discutiamos a cerca de la transferencia de archivos entre nuestro servidor y nuestro cliente y las diferentes formas de hacerlo, con este post pretendo dar las ideas generales para que entre todos mejoremos la idea y logremos hacer un file manager remoto un poco diferente a los ya explicados para que cada uno lo pueda implementar en sus troyanos...
Desearia ir en orden por lo que por ahora sentare una especie de marco teorico, y luego entre todos postearemos el codigo respectivo para las pruebas, aportes, mejoras y sugerencias, en si espero que participen todo aquel que pueda y quiera claro.

Ah y una cosa mas, lo que voy a exponer no es sacado de ninguna parte, creo yo (a no ser que me lo demuestren) que es idea original y lo desarrolle hace unos meses, porsupuesto que lo tengo funcionando en mi troyano y quisiera compratirlo con ustedes para (como repito) poder mejorarlo con vuestros aportes...

Marco Teorico
Una transferencia de archivos desde el servidor hasta el cliente (suponemos conexion inversa) se puede hacer hasta por 4 metodos diferentes, cada uno de ellos ofrecen ventajas y desventajas, aunque si se elige el mejor metodo de acuerdo al tamaño del archivo, las ventajas seran mas.
Estas son:

1.- Clasico, como su nombre lo dice, todo file manager clasico hasta ahora propuesto lo hace a traves de este metodo, se trata de coger el archivo (sea cual sea su tamaño) meterlo a una variable y transferirlo al cliente.
ventajas: ideal para archivos pekeños
desventajas: no sirve para archivos grandes

2.- Logico, se trata de coger el archivo y trocearlo en partes, solo que esas partes estan en la RAM,y desde alli transferirlo parte por parte al cliente, por ejemplo un archivo de 10MB(10485760 bytes) podria dividirse en 64 partes, cada parte es almacenado en un array  de tipo string de 64 posiciones(164KB) en cada celda.

Ventajas:
- Abrir un archivo de 10MB hacia un array string es muchisimo mas rapido que al hacerlo hacia una sola variable string.

- Puesto q la transferencia se hace parte por parte nace el concepto de poder PAUSAR la descarga para mas adelante poder reanudarla.

- Mayor control de la descarga, pues se usa 2 progressbar, una para el avance general y otra para el avance de la acumulacion de los trozos.

Desventajas:
- Nos vemos limitados por la RAM
- no es bueno para archivos muy pequeños, 5kb o 20kb

3. Fisico, es relativo al metodo anterior, pues el metodo logico esta limitado por la RAM, pero ¿que pasa si en vez de trocear el archivo hacia un array de memoria, lo hacemos hacia el disco duro?, pues que ya no hay limite de RAM, se crean 64 archivos en una carpeta oculta, y cada archivo se transfiere por el metodo clasico, en el cliente juntamos los trozos y creamos el archivo final.

Ventajas
- NO hay limite de RAM
- si el archivo original se elimina en el servidor, nosotros lo tenemos en 64 partes divididas, salvo que eliminen tambien los trozos, pero lo ocultamos bien.
- ideal para archivos importantes
- tambien se puede pausar y reanudar

Desventajas
- muy lento, crear archivos en el disco es mas lento que crear variables en la RAM
- 50MB en 64 archivos??? podriamos colapsar la pc de la victima
- tambien no sirve para archivos pequeños

4. Optimo, para mi el mejor de todos obviamente para el tamaño adecuado, este metodo no trozea el archivo, es decir no lo llevamos ni a un array de memoria ni al disco, sino el metodo optimo abre el archivo saca una parte de él en una unica variable tipo string y lo envia al cliente, ésta parte puede ser graduada desde el cliente dependiendo del tamaño del archivo a transferir, esto se repite hasta terminar con todo el archivo, asi no se ocupa ni memoria (en todo caso, es minimo lo que se ocupa) ni mucho menos disco.
Con este metodo, logro transferir archivos de 50MB 100 o 500MB o hasta mas, claro que no es muy rapido pero puedo hacer que lo sea diciendo al servidor que saque partes mas grandes para completar mas rapido el gran archivo, todo se maneja con estricto control ya que tambien aqui algunas ventajas de los metodos logico y fisico se cumplen.

Ventajas:
- ideal para archivos de tamaño muy grande
- se puede tambien pausar y reanudar
- no se necesita transferir todo el archivo ni a memoria ni a disco (solo abrirlo)
- total control con 2 progress bar

Desventajas
- un poco lento, pero se puede evitar
- para archivos medianos, 10 o 20MB se hace muy lento, mejor usar el metodo logico
- ninguna mas, creo

puesto que se puede pausar en los ultimos 3 metodos, entonces puede iniciarse otra descarga, y si se desea pausar esa  reanudar la anterior, claro esta que solo podemos transferir un archivo a la vez, aunque supongo que se puede transferir multiples archivos no solo de un mismo servidor sino de otros...

y por ultimo tambien discutiremos las opciones de cancelar descarga y previsualizar (lo que se haya descargado) para casos de archivos mp3 o videos

En el proximo capitulo, (y con todos) arrancamos el proyecto... o hay mas teoria?... las escucho...

si no os agrada la idea, cancelamos la idea...

por cierto requisitos:
un cliente y un servidor conectados (en modo local claro) es todo, es decir partimos de 1 y no de 0.

Un saludo.

vivachapas

es interesante el tema... auque yo tengo una forma q es la q siempre uso... el parecida a la que habia usado kizar en su troyano... esta posteada en el foro...
la cagada es q no tiene progressbar... lo q mas me interesaria es saber como hacer a partir un archivo en por ejemplo partes de 5kb por tirar un numero...
tb me gustaria saber cuantos kb puede enciar el control Winsock a la vez??

yovaninu

Si no os interesa, lo comprendo es mas quiza para que ya discutir mas de esto... aunque lo que proponia sigo pensando que es algo fuera de lo comun, ademas podriamos empezar este proyecto solo con preguntas y respuestas en fin...

y sobre la cantidad que transfiere el winsock, debo decirte que no es constante sino que varia depende de la conexion  a internet... unas veces transfiere 30kb de un golpe o mas, otras tan solo 8kb o menos... es variable

y sobre el progress bar tambien vi muchos codes posteados por aki mismo y a proposito unos dijeron que nos podemos crear nuestro propio progress bar a nuestro gusto... quiza alguien quiera dirigirnos en eso

Un saludo...

cark

Interesantisimo el tema !! pero todo junto no puedo aprender je,je .Ya pasare de nuevo por este post pero sera mas adelante !!!

vivachapas

Citarno es constante

ya es algo nuevo jeje...

bueno.. si dicen de hacer preguntas y respuestas yo empiezo XD

como hago para partir el archivo en partes de 4kb por ejemplo??

~~

Yo personalmente e publicado un moton de veces codigos de como subir y bajar arhivos.. a demas te explicado personalmente como enviar de 4 en 4 KB a ti vivachapas.... Pero weno, volvere a dejar un source de envio de archivos con VB:

CLIENTE:
Dim DataFile As String
Dim LenFile As Long
Dim Envio As Boolean

Private Sub Form_Load()
ws.LocalPort = 2848
ws.Listen
Envio = False
End Sub

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.Close
ws.Accept requestID
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data

If Envio = True Then
DataFile = DataFile & data
ProgressBar1.Value = Len(DataFile)
If Len(DataFile) = LenFile Then
Open "C:\Prueba2.txt" For Binary As #1
Put #1, , DataFile
Close #1
DataFile = ""
MsgBox "El Fichero se a Enviado Correctamente"
Envio = False
ProgressBar1.Value = 0
End If
End If

If Left(data, 4) = "Tam:" Then
LenFile = Mid(data, 5)
ProgressBar1.Max = LenFile
Envio = True
ws.SendData "SendFile"
End If


SERVER:
Private Sub Form_Load()
ws.Close
ws.Connect "127.0.0.1", 2848
End Sub

Private Sub ws_Connect()
ws.SendData "Tam:" & FileLen("C:\Prueba.txt")
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim Send As String
ws.GetData data

If Left(data, 8) = "SendFile" Then
Open "C:\Prueba.txt" For Binary As #1
Send = Space(LOF(1))
Get #1, , Send
Close #1

ws.SendData Send
End If

End Sub


Tb e puesto un source completo de un file manager en VB:
http://foro.elhacker.net/index.php/topic,160912.0.html

Y si kereis ponerle iconos al file manager, pues dos metodos a falta de uno:
http://foro.elhacker.net/index.php/topic,165169.0.html

Y mi explicacion de como enviar un archivo de 4 en 4 KB o como te de la gana:
http://foro.elhacker.net/index.php/topic,160099.0.html

Solo era cuestion de buscar un poco...

vivachapas

si la verdad me acordaba q lo habia leido pero cuando me fije en mis code en ninguno lo habia utilizado y haciendo memoria no me acordaba como era... tb revise el codigo q yo habia posteado xq me acorde q le habia puesto un progressbar y pense q por ahi tendria q estar... pero solamente se lo habia puesto al q recibia XD

ya lo lei y lo entendi mucho mejor ;)

gracias

yovaninu

Cita de: E0N en 26 Mayo 2007, 14:58 PM
Yo personalmente e publicado un moton de veces codigos de como subir y bajar arhivos.. a demas te explicado personalmente como enviar de 4 en 4 KB a ti vivachapas....
eon ningun codigo posteado hasta ahora permite pausar ni reanudar una descarga en proceso... no entiendo por que no quieren aprender mas de esto... que acaso no es algo fuera de lo comun? que acaso ya se hablo de esto? o por ultimo es algo muy facil de hacer?, vaya que yo demore mucho, perdonad!  y ademas incluso trate de animaros con una opcion de previsualizacion y todo eso al estilo de un ares, e incluso sente bases para en un fututo y por que no hacer un p2p o algo parecido... a veces no entiendo a los usuarios de basic...

LeandroA

bueno yo por mi parte aporto un ejemplo de como enviar archivos del tamaño que se les de la gana, enviandolo en trosos y con progressbar, es un ejemplo Basico pero con todas las validaciones para evitar error (poreso algo extenso), ojo yo pongo una forma en la que se envian paquetes y se espera una respuesta , pero hay varias formas de hacer esto, y quizas mas puntuales, pero en fin a mi me gusta de esta  ::)

http://ar.geocities.com/leandroascierto/Winsock_Envio_de_Archivos.zip

Saludos

krackwar

Cita de: eszcem en  9 Julio 2008, 03:01 AM
Cita de: E0N en 26 Mayo 2007, 14:58 PM
Yo personalmente e publicado un moton de veces codigos de como subir y bajar arhivos.. a demas te explicado personalmente como enviar de 4 en 4 KB a ti vivachapas.... Pero weno, volvere a dejar un source de envio de archivos con VB:

CLIENTE:
Dim DataFile As String
Dim LenFile As Long
Dim Envio As Boolean

Private Sub Form_Load()
ws.LocalPort = 2848
ws.Listen
Envio = False
End Sub

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.Close
ws.Accept requestID
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data

If Envio = True Then
DataFile = DataFile & data
ProgressBar1.Value = Len(DataFile)
If Len(DataFile) = LenFile Then
Open "C:\Prueba2.txt" For Binary As #1
Put #1, , DataFile
Close #1
DataFile = ""
MsgBox "El Fichero se a Enviado Correctamente"
Envio = False
ProgressBar1.Value = 0
End If
End If

If Left(data, 4) = "Tam:" Then
LenFile = Mid(data, 5)
ProgressBar1.Max = LenFile
Envio = True
ws.SendData "SendFile"
End If


SERVER:
Private Sub Form_Load()
ws.Close
ws.Connect "127.0.0.1", 2848
End Sub

Private Sub ws_Connect()
ws.SendData "Tam:" & FileLen("C:\Prueba.txt")
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim Send As String
ws.GetData data

If Left(data, 8) = "SendFile" Then
Open "C:\Prueba.txt" For Binary As #1
Send = Space(LOF(1))
Get #1, , Send
Close #1

ws.SendData Send
End If

End Sub


Tb e puesto un source completo de un file manager en VB:
http://foro.elhacker.net/index.php/topic,160912.0.html

Y si kereis ponerle iconos al file manager, pues dos metodos a falta de uno:
http://foro.elhacker.net/index.php/topic,165169.0.html

Y mi explicacion de como enviar un archivo de 4 en 4 KB o como te de la gana:
http://foro.elhacker.net/index.php/topic,160099.0.html

Solo era cuestion de buscar un poco...




este troyano seria de conexion inverso o directa?
Ninguna de las dos por que no es un troyano  :xD :xD :xD
Mi blog
Bienvenido krackwar, actualmente tu puntuación es de 38 puntos y tu rango es Veteran.
El pollo número 1, es decir yo, (krackwar), adoro a Shaddy como a un dios.