• XSS.stack #1 – первый литературный журнал от юзеров форума

[Rust] File Pumper

GridsNetwork

ripper
КИДАЛА
Регистрация
30.03.2023
Сообщения
426
Реакции
128
Гарант сделки
2
Пожалуйста, обратите внимание, что пользователь заблокирован
Код:
use std::fs::OpenOptions;
use std::io::prelude::*;
use std::path::Path;
use std::thread;
use std::time::Duration;
const MB: usize = 1024 * 1024;
fn main() {
    let args: Vec<String> = std::env::args().collect();
    if args.len() != 3 {
        println!("Usage: pump_file <file> <mb>");
        return;
    }
    let path = Path::new(&args[1]);
    let mb = args[2].parse::<usize>().expect("Invalid MB argument");
    run_background(path, mb);
}
pub fn run_background(path: &Path, mb: usize) {
    let join_handle: thread::JoinHandle<_> = thread::spawn(move || {
        run_hourly(path, mb);
    });
    join_handle.forget();
}
pub fn run_hourly(path: &Path, mb: usize) {
    loop {
        let bytes_to_add = MB * mb;
        if file_exists(path) {
            let new_size = calculate_new_size(path, bytes_to_add);
            println!("{} already exists, new size will be {} bytes.", path.display(), new_size);
        } else {
            println!("{} does not exist.", path.display());
            return;
        }
        let mut file = OpenOptions::new()
            .write(true)
            .open(path)
            .expect("Failed to open file");
        let buf = vec![0u8; bytes_to_add];
        file.write_all(&buf).expect("Failed to write null bytes to file");
        println!("Successfully added {} MB ({} bytes) to {}", mb, bytes_to_add, path.display());
        thread::sleep(Duration::from_secs(3600));
    }
}
fn calculate_new_size(path: &Path, bytes_to_add: usize) -> u64 {
    let metadata = std::fs::metadata(path).expect("Failed to get file metadata");
    metadata.len() + bytes_to_add as u64
}
fn file_exists(path: &Path) -> bool {
    std::fs::metadata(path).is_ok()
}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх