È possibile creare un file che non completa mai il processo di download? [chiuso]

18

È possibile creare un file da zero che quando viene scaricato tramite HTTP, il download non viene mai completato? Non sto parlando di ZIP BOMB qui.

Alcuni software di download ti permettono di scaricare eventi di streaming, quindi la dimensione finale del file non è nota. È possibile creare un file in cui il software di download non è in grado di "indovinare" la dimensione effettiva del file e continua a scaricare?

    
posta mahen23 07.03.2017 - 10:30
fonte

3 risposte

29

Sì, è possibile. Hai solo bisogno di usare la codifica di trasferimento Chunked. link

A seconda della configurazione del tuo server, potresti essere in grado di creare semplicemente uno script CGI che scrive e svuota lo stdout in un ciclo infinito.

Non sembra funzionare su Lighttpd, che credo comprenda l'intero output dallo script CGI prima di inviarlo al client. Però potrebbe funzionare su altri server web.

Esempio:

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

seguito da una ripetizione infinita di "1e \ r \ nUh-oh, questo non si fermerà mai. \ n"

    
risposta data 07.03.2017 - 10:45
fonte
15

Sì, basta trasmettere / dev / urandom al client. In primo luogo, forse hai bisogno di falsificare l'intestazione del file, in modo che il cliente pensi che stia scaricando le cose che ha richiesto, dopodiché ti basta sfogare la posta indesiderata.

Un'idea su come farlo in Python:

with open("/dev/random", 'rb') as f:
    print repr(f.read(10))
    
risposta data 07.03.2017 - 10:47
fonte
5

Se l'output è generato dinamicamente dal software del server, è possibile creare un flusso che continua fino a quando non si interrompe la connessione. Tuttavia, se vuoi letteralmente un file, non può avere dimensioni infinite.

Tuttavia, se il file system supporta file sparsi, è possibile creare un file più grande del supporto di archiviazione e in questo modo produrre un file che richiederebbe così tanto tempo per scaricare che non è possibile scaricarlo.

La dimensione massima del file differisce tra i file system. Su ext4 il limite è 16 TB. Su tmpfs il limite è 8EB. Ecco un paio di esempi su come questi file possono essere creati:

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

Fai attenzione quando metti tali file su un server web. Se il software server che stai utilizzando non riduce la larghezza di banda, è possibile che un client malintenzionato sovraccarichi la rete.

    
risposta data 07.03.2017 - 22:14
fonte

Leggi altre domande sui tag