
Tunnelisation du trafic Internet via WhatsApp

Ceci est un morceau de code basé sur Baileys qui permet de tunnelliser des données TCP via deux comptes WhatsApp.
Ceci peut être utile dans différentes situations, par exemple pour les opérateurs réseau qui offrent des données WhatsApp illimitées ou dans les avions où vous bénéficiez également de données de réseaux sociaux illimitées.
Il utilise Baileys car c'est une bibliothèque WhatsApp multi-appareils basée sur WS et pourrait donc être utilisé sur Android à l'avenir, via Termux par exemple.
L'idée est de l'utiliser avec un proxy configuré sur le serveur comme ceci : [Client (accès restreint) -> WhatsApp -> Serveur -> Proxy -> Internet]
Je m'excuse par avance car Javascript n'est pas l'un de mes langages de codage principaux :/
À utiliser uniquement à des fins éducatives.
Il envoie des paquets réseau TCP via des messages texte et fichiers WhatsApp, selon la quantité de caractères, il les divise en différents messages texte ou fichiers.
Pour éviter d'être déconnecté par WhatsApp par défaut, la limite est de 20 000 caractères par message, actuellement codé en dur dans wasocket.js.
J'ai effectué plusieurs tests : en dessous de cette limite, vous risquez d'être banni pour avoir envoyé trop de messages, et au-dessus de 80 000 caractères, cela risque de dépasser le temps imparti.
Si un paquet réseau dépasse la limite (20 000 caractères par défaut), il sera envoyé en tant que fichier si cette fonctionnalité est activée. De plus, si plusieurs paquets réseau sont mis en cache, il utilisera le même critère.
Les messages fichiers sont envoyés comme fichiers binaires, les réponses TCP sont concaténées avec un délimiteur et compressées avec brotli pour réduire l'utilisation des données.
Il met en cache les réponses des sockets TCP pour les regrouper et envoyer le maximum de données dans un message, réduisant ainsi le nombre de messages, améliorant la vitesse et réduisant la probabilité d'être banni.
Avant : (sans fichiers et sans mise en cache des réponses)
curl -x localhost:12345 https://www.youtube.com
- 50-80 messages
- 30-40 secondes
Après : (avec fichiers et mise en cache des réponses)
curl -x localhost:12345 https://www.youtube.com
- 6-8 messages
- 7-15 secondes
Si vous n'êtes pas autorisé à envoyer des fichiers, utilisez le drapeau --disable-files lors du démarrage du serveur et du client pour désactiver cette fonctionnalité.
L'idée m'est venue en voyageant en Amérique du Sud. Les données réseau des opérateurs sont généralement limitées à peu de Go, mais WhatsApp est généralement illimité. J'ai essayé de créer cette bibliothèque car je n'en ai trouvé aucune utilisable à l'époque.
Vous devez avoir accès à deux comptes WhatsApp, un pour le serveur et un pour le client. Vous pouvez transférer un port local ou utiliser un proxy externe.
Clonez le dépôt sur votre serveur et installez les dépendances node.
cd path/to/wa-tunnelnpm installEnsuite, vous pouvez démarrer le serveur avec la commande suivante où port est le port du proxy et host est l'hôte du proxy que vous souhaitez transférer. Et number est le numéro WhatsApp du client avec l'indicatif du pays sans le +.
npm run server host port number
Vous pouvez utiliser un proxy local comme suit :
npm run server localhost 3128 12345678901
Ou vous pouvez utiliser un proxy normal comme suit :
npm run server 192.168.0.1 3128 12345678901
Clonez le dépôt sur votre serveur et installez les dépendances node.
cd path/to/wa-tunnelnpm installEnsuite, vous pouvez démarrer le serveur avec la commande suivante où port est le port local auquel vous vous connecterez et number est le numéro WhatsApp du serveur avec l'indicatif du pays sans le +.
npm run client port number
Par exemple
npm run client 8080 1234567890
La première fois que vous ouvrez le script, Baileys vous demandera de scanner le code QR avec l'application WhatsApp, après cela, la session est sauvegardée pour une utilisation ultérieure.
Il peut planter, c'est normal, après cela redémarrez simplement le script et votre client/serveur sera prêt !
Une fois que vous avez à la fois le client et le serveur prêts, vous pouvez tester en utilisant curl et voir la magie opérer.
curl -v -x proxyHost:proxyPort https://httpbin.org/ip
Avec les commandes d'exemple, cela donnerait :
curl -v -x localhost:8080 https://httpbin.org/ip
Il a également été testé avec un navigateur normal comme Firefox, c'est lent mais cela fonctionne.
Vous pouvez également transférer d'autres ports de protocole comme SSH en configurant le serveur comme ceci :
npm run server localhost 22 12345678901
Et ensuite connectez-vous au serveur en utilisant sur le client :
ssh root@localhost -p 8080
Pour utiliser sur Android, vous pouvez l'utiliser avec Termux en utilisant les commandes suivantes :
pkg update && pkg upgrade
pkg install git nodejs -y
git clone https://github.com/aleixrodriala/wa-tunnel.git
cd wa-tunnel
npm install
L'utilisation de cette bibliothèque peut entraîner le bannissement de votre compte WhatsApp. Utilisez-la avec un numéro temporaire ou à vos propres risques.