Skip to content

grisuno/gopher2

🌐 Gopher 2.0

image

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
NotebookLM Mind Map (1)

🔐 Filosofía de seguridad

  • El cliente nunca ejecuta código: solo descifra y muestra texto.
  • El servidor ejecuta Python en entorno restringido: sin os, subprocess, ni import arbitrario.
  • Toda comunicación es opaca sin la clave AES.
  • Validación estricta de selectores, tamaños y formatos.

🚀 Instalación

git clone [<tu-repo>](https://github.com/grisuno/gopher2)
cd gopher2
./install.sh

Requiere:

  • Python 3.8+
  • pip3
  • Acceso a internet (para instalar cryptography)

▶️ Uso

  1. Iniciar el servidor
./.venv/bin/python server.py

Por 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": {}
  }
}
  1. Consultar con el cliente
./.venv/bin/python client.py gopher://127.0.0.1:7070/home

Salida:

Hola
Desde: 14:30
  1. 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).

📁 Estructura de archivos

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

⚠️ Advertencias

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).

🧪 Pruebas rápidas

# 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.

image image

Python Shell Script Flask License: GPL v3

🔗 Links

About

a little upgrade to gopher

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published