Un protocolo minimalista inspirado en Gopher, pero con:
- Contenido con imágenes (mediante bloques
<img>/public/logo.png</img>ejecutados en el servidor, convirtiendo la imagen en texto ansi con colores) - Contenido con animaciones (mediante multiples bloques /anim/frameNN
<img>/public/anim/frameNN.png</img>ejecutados en el servidor, convirtiendo las imagenes en texto ansi con colores estilo flipbook) - Contenido dinámico (mediante bloques
<python>...</python>ejecutados en el servidor) - Contenido Formateado (mediante bloques markdown
<md>...</md>se codifica en ansi la salida markdown) - Cifrado de extremo a extremo (AES-256-GCM con clave negociada)
- Verificación de la huella digital del servidor (como SSH) ¿Confía en la identidad de este servidor? (s/N): (previene ataques de —man-in-the-middle)
- Sin JavaScript, sin HTTP, sin rastreo
Ideal para:
- Sitios privados cifrados
- APIs minimalistas
- Canales de comunicación seguros
- Experimentación con redes alternativas
- El cliente nunca ejecuta código: solo descifra y muestra texto.
- El servidor ejecuta Python en entorno restringido: sin
os,subprocess, niimportarbitrario. - Toda comunicación es opaca sin la clave AES.
- Validación estricta de selectores, tamaños y formatos.
git clone [<tu-repo>](https://github.com/grisuno/gopher2)
cd gopher2
./install.sh- Python 3.8+
- pip3
- Acceso a internet (para instalar cryptography)
- Iniciar el servidor
./.venv/bin/python server.pyPor defecto escucha en 0.0.0.0:7070.
El contenido se define en selectors.json. Ejemplo:
{
"/home": {
"content": "Hola\\n<python>print(f'Desde: {time.strftime(\"%H:%M\")}')</python>",
"vars": {}
}
}- Consultar con el cliente
./.venv/bin/python client.py gopher://127.0.0.1:7070/homeSalida:
Hola
Desde: 14:30
- Personalizar clave AES Edita AES_KEY en ambos archivos (gopher2_server.py, gopher2_client.py) o usa --key en el cliente:
./.venv/bin/python gopher2_client.py --key "a1b2..." gopher://...La clave debe ser 64 caracteres hexadecimales (32 bytes).
server.py: servidor dinámico (como PHP en Gopher) client.py: cliente ligero con descifrado selectors.json: base de datos de contenido (fácil migración a MongoDB) install.sh: instalador seguro y reproducible requirements.txt: dependencias mínimas
No expongas el servidor a internet sin firewall. La clave AES debe mantenerse secreta. Los bloques solo deben contener código de confianza (definido por el administrador del servidor).
# Terminal 1
./.venv/bin/python server.py
# Terminal 2
./.venv/bin/python client.py gopher://127.0.0.1:7070/Deberías ver la hora del servidor cifrada en tránsito y descifrada en el cliente.
Gopher 2.0 no es un reemplazo de HTTP. Es una alternativa para quienes valoran la simplicidad, la privacidad y el control total.
- 🔗
(Buy me a coffe ?)
- 🔗 https://www.patreon.com/c/LazyOwn (Patreon)
- 🔗 https://deepwiki.com/grisuno/gopher2 (Wiki)
- 🔗 https://www.youtube.com/watch?v=rOWuOgCh284 (Vlog Es)
- 🔗 https://www.youtube.com/watch?v=GxjWUm52sKg (Vlog Eng)
- 🔗 https://www.podbean.com/media/share/pb-jy5sy-19a4d5a (Es Podcast)
- 🔗 https://medium.com/@lazyown.redteam/%EF%B8%8F-gopher-2-0-when-your-website-is-a-secret-society-and-only-members-get-the-decrypted-menu-08dae04e4a42 (Blog)