#include #include #include #include #include #include #include #include using namespace std; const int NUM_THREADS = 12; mutex log_mutex; // Koleksi User-Agent Modern (Desktop & Mobile) const vector USER_AGENTS = { "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", "Mozilla/5.0 (iPhone; CPU iPhone OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Mobile/15E148 Safari/604.1", "Mozilla/5.0 (Linux; Android 14; SM-S928B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Mobile Safari/537.36", "Mozilla/5.0 (iPad; CPU OS 17_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/124.0.6367.111 Mobile/15E148 Safari/604.1", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0" }; size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { return fwrite(ptr, size, nmemb, stream); } bool download_chunk(const string& url, const string& out_filename, long start_byte, long end_byte, int thread_id) { CURL *curl; FILE *fp; CURLcode res; curl = curl_easy_init(); if (curl) { fp = fopen(out_filename.c_str(), "wb"); string range = to_string(start_byte) + "-" + to_string(end_byte); // 1. Pilih User-Agent acak/berbeda untuk thread ini string selected_ua = USER_AGENTS[thread_id % USER_AGENTS.size()]; // 2. Rakit Header HTTP Siluman (Mirip Request Video Asli) struct curl_slist *headers = NULL; headers = curl_slist_append(headers, ("User-Agent: " + selected_ua).c_str()); headers = curl_slist_append(headers, "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"); headers = curl_slist_append(headers, "Accept-Language: en-US,en;q=0.9,id;q=0.8"); headers = curl_slist_append(headers, "Connection: keep-alive"); headers = curl_slist_append(headers, "Sec-Fetch-Dest: video"); // Manipulasi bahwa ini adalah request elemen