searchgpt / src /core /web_loader.py
hadadrjt's picture
SearchGPT: Initial.
408c946
#
# 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()