¿Es posible crear un archivo que nunca complete su proceso de descarga? [cerrado]

18

¿Es posible crear un archivo desde cero que cuando se descarga a través de HTTP, la descarga nunca se completa? No estoy hablando de ZIP BOMB aquí.

Algunos programas de descarga le permiten descargar eventos de transmisión, por lo que no se conoce el tamaño final del archivo. ¿Es posible crear un archivo en el que el software de descarga no pueda "adivinar" el tamaño real del archivo y siga descargando?

    
pregunta mahen23 07.03.2017 - 10:30
fuente

3 respuestas

29

Sí, es posible. Solo necesitas usar la codificación de transferencia fragmentada. enlace

Dependiendo de la configuración de su servidor, es posible que pueda crear simplemente un script CGI que escriba y elimine la salida estándar en un bucle infinito.

Parece que no funciona en Lighttpd, que creo que amortigua toda la salida del script CGI antes de enviarlo al cliente. Aunque podría funcionar en otros servidores web.

Ejemplo:

HTTP/1.1 200 OK\r\n
Transfer-Encoding: chunked\r\n
Content-Type: text/plain\r\n
\r\n
1e\r\n
Uh-oh, this will never stop.\n
1e\r\n
Uh-oh, this will never stop.\n

seguido de una repetición infinita de "1e \ r \ nUh-oh, esto nunca se detendrá. \ n"

    
respondido por el Oskar Skog 07.03.2017 - 10:45
fuente
15

Sí, solo transmite / dev / urandom al cliente. Primero, tal vez necesites falsificar el encabezado del archivo, de modo que el cliente piense que está descargando las cosas que solicitó, y luego simplemente transmita basura al azar.

Una idea sobre cómo hacer esto en Python:

with open("/dev/random", 'rb') as f:
    print repr(f.read(10))
    
respondido por el r00m 07.03.2017 - 10:47
fuente
5

Si la salida es generada dinámicamente por el software del servidor, es posible crear una secuencia que continúe hasta que interrumpa la conexión. Sin embargo, si literalmente quieres un archivo, no puede tener un tamaño infinito.

Sin embargo, si su sistema de archivos admite archivos dispersos, puede crear un archivo más grande que el medio de almacenamiento y así producir un archivo que demoraría tanto en descargarse que no es posible descargarlo todo.

El tamaño máximo de archivo difiere entre los sistemas de archivos. En ext4 el límite es de 16TB. En tmpfs el límite es 8EB. Aquí hay un par de ejemplos sobre cómo se podrían crear tales archivos:

dd if=/dev/null of=/dev/shm/sparse bs=1 seek=7E
dd if=/dev/null of=/tmp/sparse bs=1 seek=15T

Tenga cuidado cuando coloque dichos archivos en un servidor web. Si el software del servidor que está utilizando no reduce el ancho de banda, es posible que un cliente malicioso sobrecargue su red.

    
respondido por el kasperd 07.03.2017 - 22:14
fuente

Lea otras preguntas en las etiquetas