Panel Alexamigo
← 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