Spaces:
Paused
Paused
| # | |
| # SPDX-FileCopyrightText: Hadad <hadad@linuxmail.org> | |
| # SPDX-License-Identifier: Apache-2.0 | |
| # | |
| import random | |
| import threading | |
| import time | |
| from collections import deque | |
| from config import ( | |
| OS, | |
| OCTETS, | |
| BROWSERS, | |
| CHROME_VERSIONS, | |
| FIREFOX_VERSIONS, | |
| SAFARI_VERSIONS, | |
| EDGE_VERSIONS, | |
| DOMAINS, | |
| PROTOCOLS, | |
| SEARCH_ENGINES, | |
| KEYWORDS, | |
| COUNTRIES, | |
| LANGUAGES, | |
| TIMEZONES | |
| ) | |
| class WebLoader: | |
| def __init__(self): | |
| self.ipv4_pool = deque(maxlen=1000) | |
| self.ipv6_pool = deque(maxlen=1000) | |
| self.user_agent_pool = deque(maxlen=500) | |
| self.origin_pool = deque(maxlen=500) | |
| self.referrer_pool = deque(maxlen=500) | |
| self.location_pool = deque(maxlen=500) | |
| self.lock = threading.Lock() | |
| self.running = True | |
| def generate_ipv4(self): | |
| while len(self.ipv4_pool) < 1000 and self.running: | |
| octet = random.choice(OCTETS) | |
| ip = f"{octet}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(1, 254)}" | |
| with self.lock: | |
| self.ipv4_pool.append(ip) | |
| time.sleep(0.001) | |
| def generate_ipv6(self): | |
| while len(self.ipv6_pool) < 1000 and self.running: | |
| segments = [] | |
| for _ in range(8): | |
| segments.append(f"{random.randint(0, 65535):04x}") | |
| ip = ":".join(segments) | |
| with self.lock: | |
| self.ipv6_pool.append(ip) | |
| time.sleep(0.001) | |
| def generate_user_agents(self): | |
| os_list = OS | |
| browsers = BROWSERS | |
| chrome_versions = CHROME_VERSIONS | |
| firefox_versions = FIREFOX_VERSIONS | |
| safari_versions = SAFARI_VERSIONS | |
| edge_versions = EDGE_VERSIONS | |
| while len(self.user_agent_pool) < 500 and self.running: | |
| browser = random.choice(browsers) | |
| os_string = random.choice(os_list) | |
| if browser == "Chrome": | |
| version = random.choice(chrome_versions) | |
| ua = f"Mozilla/5.0 ({os_string}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version} Safari/537.36" | |
| elif browser == "Firefox": | |
| version = random.choice(firefox_versions) | |
| ua = f"Mozilla/5.0 ({os_string}) Gecko/20100101 Firefox/{version}" | |
| elif browser == "Safari": | |
| version = random.choice(safari_versions) | |
| webkit_version = f"{600 + random.randint(0, 15)}.{random.randint(1, 9)}.{random.randint(1, 20)}" | |
| ua = f"Mozilla/5.0 ({os_string}) AppleWebKit/{webkit_version} (KHTML, like Gecko) Version/{version} Safari/{webkit_version}" | |
| elif browser == "Edge": | |
| version = random.choice(edge_versions) | |
| ua = f"Mozilla/5.0 ({os_string}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version.split('.')[0]}.0.0.0 Safari/537.36 Edg/{version}" | |
| else: | |
| version = f"{random.randint(70, 100)}.0.{random.randint(3000, 5000)}.{random.randint(50, 150)}" | |
| ua = f"Mozilla/5.0 ({os_string}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{version} Safari/537.36 OPR/{random.randint(80, 106)}.0.0.0" | |
| with self.lock: | |
| self.user_agent_pool.append(ua) | |
| time.sleep(0.002) | |
| def generate_origins(self): | |
| domains = DOMAINS | |
| protocols = PROTOCOLS | |
| while len(self.origin_pool) < 500 and self.running: | |
| protocol = random.choice(protocols) | |
| domain = random.choice(domains) | |
| origin = f"{protocol}{domain}" | |
| with self.lock: | |
| self.origin_pool.append(origin) | |
| time.sleep(0.002) | |
| def generate_referrers(self): | |
| search_engines = SEARCH_ENGINES | |
| keywords = KEYWORDS | |
| while len(self.referrer_pool) < 500 and self.running: | |
| engine = random.choice(search_engines) | |
| keyword = random.choice(keywords) | |
| referrer = f"{engine}{keyword}" | |
| with self.lock: | |
| self.referrer_pool.append(referrer) | |
| time.sleep(0.002) | |
| def generate_locations(self): | |
| countries = COUNTRIES | |
| languages = LANGUAGES | |
| timezones = TIMEZONES | |
| while len(self.location_pool) < 500 and self.running: | |
| country = random.choice(countries) | |
| language = random.choice(languages) | |
| timezone = random.choice(timezones) | |
| location = { | |
| "country": country, | |
| "language": language, | |
| "timezone": timezone | |
| } | |
| with self.lock: | |
| self.location_pool.append(location) | |
| time.sleep(0.002) | |
| def get_ipv4(self): | |
| with self.lock: | |
| if self.ipv4_pool: | |
| return self.ipv4_pool[random.randint(0, len(self.ipv4_pool) - 1)] | |
| return f"{random.randint(1, 223)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(1, 254)}" | |
| def get_ipv6(self): | |
| with self.lock: | |
| if self.ipv6_pool: | |
| return self.ipv6_pool[random.randint(0, len(self.ipv6_pool) - 1)] | |
| segments = [f"{random.randint(0, 65535):04x}" for _ in range(8)] | |
| return ":".join(segments) | |
| def get_user_agent(self): | |
| with self.lock: | |
| if self.user_agent_pool: | |
| return self.user_agent_pool[random.randint(0, len(self.user_agent_pool) - 1)] | |
| return "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" | |
| def get_origin(self): | |
| with self.lock: | |
| if self.origin_pool: | |
| return self.origin_pool[random.randint(0, len(self.origin_pool) - 1)] | |
| return "https://www.google.com" | |
| def get_referrer(self): | |
| with self.lock: | |
| if self.referrer_pool: | |
| return self.referrer_pool[random.randint(0, len(self.referrer_pool) - 1)] | |
| return "https://www.google.com/search?q=search" | |
| def get_location(self): | |
| with self.lock: | |
| if self.location_pool: | |
| return self.location_pool[random.randint(0, len(self.location_pool) - 1)] | |
| return { | |
| "country": "US", | |
| "language": "en-US", | |
| "timezone": "America/New_York" | |
| } | |
| def start_engine(self): | |
| threads = [ | |
| threading.Thread(target=self.generate_ipv4, daemon=True), | |
| threading.Thread(target=self.generate_ipv6, daemon=True), | |
| threading.Thread(target=self.generate_user_agents, daemon=True), | |
| threading.Thread(target=self.generate_origins, daemon=True), | |
| threading.Thread(target=self.generate_referrers, daemon=True), | |
| threading.Thread(target=self.generate_locations, daemon=True) | |
| ] | |
| for thread in threads: | |
| thread.start() | |
| def stop(self): | |
| self.running = False | |
| web_loader = WebLoader() | |
| web_loader.start_engine() |