wa-tunnel: túnel TCP sobre Whatsapp

El otro día en pleno vuelo de una compañía que no voy a nombrar, vi que a bordo ofrecían servicio de Internet en dos modalidades/precios: navegación normal o navegación sólo para servicios de mensajería instantánea como WhatsApp. Por otro lado, también existen muchos operadores de telefonía e Internet que tiene tarifas sin límite de GBs para WhatsApp... ¿y si hiciéramos un túnel a través de WhatsApp para aprovecharnos de ésto? Siempre con motivos académicos por supuesto...

Pues desde Andorra Aleix Rodríguez nos ofrece una herramienta para llevarlo a cabo: wa-tunnel, una herramienta basada en Baileys que nos permitirá hacer un túnel TCP a través de dos cuentas de Whatsapp.

Dependiendo de la cantidad de caracteres necesarios, dividirá la comunicación en diferentes mensajes de texto o archivos. Para que WhatsApp no agote el tiempo de espera, por defecto está limitado a 20k caracteres por mensaje (actualmente está configurado en wasocket.js). Si un paquete de red supera el límite (los 20k caracteres), se enviará como un archivo si está habilitada la opción. Además, si se almacenan en caché varios paquetes de red, utilizará los mismos criterios.

Los mensajes de archivo se envían como archivos binarios, las respuestas de TCP se concatenan con un delimitador y se comprimen con brotli para reducir el uso de datos.

También almacena en caché las respuestas del socket TCP para agruparlas y enviar la máxima cantidad de datos en un mensaje, por lo tanto, reduce la cantidad de mensajes, mejora la velocidad y reduce la probabilidad de ser baneado.

Instalación

Debemos tener acceso a dos cuentas de Whatsapp, una para el servidor y otra para el cliente. Podemos reenviar un puerto local o usar un proxy externo.

Lado del servidor

Clona el repositorio en tu servidor e instala las dependencias de los nodos.

    cd path/to/wa-tunnel
    npm install
  
Luego, podemos iniciar el servidor con el siguiente comando, donde el puerto es el puerto proxy y el host es el host proxy que desea reenviar. Y número es el número de WhatsApp del cliente con el código del país todo junto y sin +.    
npm run server host port number

Ej. npm run server 192.168.0.1 3128 12345678901

Lado del cliente

Clona el repositorio en tu servidor e instala las dependencias de los nodos.
    cd path/to/wa-tunnel
    npm install
  
Luego, podemos iniciar el servidor con el siguiente comando, donde puerto es el puerto local donde se conectará y el número es el número de WhatsApp del servidor con el código de país en conjunto y sin +.    
npm run client port number

Ej. npm run client 8080 1234567890

Uso

La primera vez que abramos el script, el Baileys nos pedirá que escaneemos el código QR con la aplicación de WhatsApp, después de eso, la sesión se guardará para su uso posterior.

Si falla (suele ser normal) simplemente hay que reiniciar el script y tendremos nuestro cliente/servidor listo.

Una vez que tengamos el cliente y el servidor listos, podemos probar usando curl y ver cómo sucede la magia.
curl -v -x localhost:8080 https://httpbin.org/ip

Ha sido probado también con un navegador normal como Firefox, es lento pero se puede usar.

También podemos reenviar otros puertos de protocolos como SSH configurando el servidor de esta manera:
npm run server localhost 22 12345678901

Y luego conectarse al servidor usando en el cliente:
ssh root@localhost -p 8080

Uso en Android

Para usarlo en Android, podemos hacerlo con Termux usando los siguientes comandos:
pkg update && pkg upgrade
pkg install git nodejs -y
git clone https://github.com/aleixrodriala/wa-tunnel.git
cd wa-tunnel
npm install

Proyecto: https://github.com/aleixrodriala/wa-tunnel

Comentarios

  1. Está muy interesante muchas gracias!! Continuaré leyendolo para entender bien el proceso.
    saludos

    ResponderEliminar

Publicar un comentario