← Memory
starlord.md
# Starlord - Traffic Simulation Experiment
## Objetivo
Experimento para testear limites de deteccion de Google Analytics 4 y Search Console en propiedades propias. Reto tecnico, no produccion.
## Ubicacion actual
- **VPS Hetzner (Stargate)**: `/home/ubuntu/proyectos-cloud/starlord/` (migrado desde OVH 05/04/2026)
- **Local**: `C:\Users\alexa\Desktop\PROYECTOS\starlord\`
## URL y Acceso
- **URL**: `https://starlord.beepeek.com` | **Puerto**: 5025
- **Auth**: HTTP Basic `alex` (htpasswd en `/etc/nginx/.htpasswd_starlord`)
- **SSL**: Let's Encrypt, expira 07/07/2026, auto-renovacion
- **DNS**: A record `starlord.beepeek.com` → `204.168.170.41` (cPanel Raiola, creado 08/04/2026)
- **Service**: `sudo systemctl restart starlord`
## Stack
- Python 3 + Patchright (fork stealth de Playwright, async, headless Chromium)
- FastAPI + Jinja2 (web dashboard)
- SQLite (historial de runs)
- Webshare.io proxies (rotating residential)
- 16 geo profiles (es, us, gb, de, fr, pt, br, it, mx, ar, co, cl, nl, ch, ca, au)
- User agents reales modernos (Chrome, Firefox, Safari, Edge)
## Webshare Config
- **API Key**: `3w9vqsu3vxwy7oo10800hyhtjqg31r7rd9lno02u`
- **Cuenta**: `marketing@blueseo.es`
- **Plan**: Rotating Residential shared, $4.375/mes, 1 GB bandwidth/mes
- **Proxy user**: `ivgivhed` / **pass**: `s11pm2bew047`
- **Host**: `p.webshare.io` | **Puerto base**: `10000` (rotar 10000-10999)
- **Pool**: 80M+ IPs, 195 paises
- **API**: `https://proxy.webshare.io/api/v2/` | Auth: `Authorization: Token <KEY>`
- **Proxy list download token**: `qydrimruaiolyxkrlxwqpvvdficiyezdyjygyucz`
- **Rate limits API**: 240 req/min general, 30 req/min proxy list, 60 req/min proxy endpoints
- **NOTA**: 1 GB/mes es poco para scraping intensivo. Controlar consumo.
## Archivos del proyecto
```
starlord/
├── .env # Config (proxy, target, concurrencia, delays)
├── starlord.py # Motor CLI standalone
├── starlord_engine.py # Motor core (importable, usado por web)
├── starlord_web.py # FastAPI web dashboard (puerto 5025)
├── starlord.db # SQLite historial de runs
├── starlord.log # Logs de ejecucion
├── templates/
│ └── index.html # Dashboard UI (dark theme, SSE logs)
├── batch15.py # Script batch 15 sesiones ES
├── test_*.py # Varios scripts de test
└── venv/ # Python venv (patchright, faker, dotenv, fastapi, uvicorn)
```
## .env (configuracion)
```
WEBSHARE_API_KEY=3w9vqsu3vxwy7oo10800hyhtjqg31r7rd9lno02u
PROXY_USER=ivgivhed
PROXY_PASS=s11pm2bew047
PROXY_HOST=p.webshare.io
PROXY_PORT=80
TARGET_URL=https://alexamigo.com
MAX_CONCURRENT=2
MIN_DELAY=8
MAX_DELAY=25
SESSIONS_PER_RUN=5
```
## Setup en VPS nuevo (pasos)
```bash
# 1. Crear carpeta
mkdir -p /ruta/starlord && cd /ruta/starlord
# 2. Crear venv e instalar deps
python3 -m venv venv
source venv/bin/activate
pip install playwright asyncio-pool faker python-dotenv
# 3. Instalar solo Chromium (ahorra disco)
playwright install chromium
playwright install-deps chromium
# 4. Copiar .env y starlord.py
# 5. Test con 1 sesion
SESSIONS_PER_RUN=1 python3 starlord.py
# 6. Ejecucion normal
python3 starlord.py # 5 sesiones (default)
SESSIONS_PER_RUN=10 python3 starlord.py # 10 sesiones
```
## Que simula cada sesion
1. **Perfil aleatorio**: viewport (desktop/mobile/tablet), idioma, timezone, color scheme
2. **Proxy rotado**: puerto aleatorio 10000-10999, IP residencial diferente cada sesion
3. **Referrer variado**: direct, google.com, google.es, bing, linkedin, twitter, facebook
4. **Navegacion interna**: 1-4 paginas por sesion (/, /consultor-seo, /blog, /contacto, etc.)
5. **Comportamiento humano**:
- Mouse movements aleatorios (2-6 movimientos por pagina)
- Scroll progresivo con pausa (simula lectura)
- Scroll back up ocasional (30% probabilidad)
- Tiempo de lectura 8-25s por pagina
- Click en enlaces internos aleatorios (30% probabilidad)
6. **Anti-deteccion**:
- `navigator.webdriver` overridden a undefined
- `navigator.plugins` falseado
- `window.chrome.runtime` presente
- `--disable-blink-features=AutomationControlled`
- User agent aleatorio via Faker
## Lo que Google mide (y hay que burlar)
- **GA4**: JS execution completo, fingerprint navegador, behavioral signals, session quality, Google Signals
- **Search Console**: Solo mide impresiones/clics DENTRO de google.com (mucho mas dificil, necesita busqueda real + clic en SERP)
## Mejoras pendientes / Ideas
- [ ] Cron para ejecuciones programadas (distribuir a lo largo del dia)
- [ ] Validar en GA4 Realtime que las sesiones pasan el filtro
- [ ] Stealth mas avanzado: canvas fingerprint, WebGL, font enumeration
- [ ] Playwright stealth plugin (playwright-stealth o similar)
- [ ] Simular Search Console: abrir google.com → buscar keyword → clic en resultado propio
- [ ] Dashboard de resultados (sesiones enviadas vs detectadas en GA4)
- [ ] Control de bandwidth (1 GB/mes es limitado)
- [ ] Perfiles de navegacion mas variados (leer articulo completo, rellenar formulario)
- [ ] Systemd service para ejecucion continua
- [x] DNS starlord.beepeek.com configurado (08/04/2026)
- [x] SSL Let's Encrypt configurado (08/04/2026)
- [x] Web dashboard funcional con auth basica
## Tests realizados
- **05/04/2026**: 1 sesion OK en VPS OVH, 4 paginas, ~19 min
- **05/04/2026**: Batch 5+10 sesiones en Hetzner, todo OK, proxies estables
- **06/04/2026**: Web dashboard + engine separado, batch15 OK