
Туннелирование интернет-трафика через Whatsapp

Это код на основе Baileys, который позволяет туннелировать TCP-данные через два аккаунта WhatsApp.
Это может быть полезно в различных ситуациях, например, у операторов связи, предоставляющих безлимитный WhatsApp, или в самолетах, где также есть безлимитный доступ к социальным сетям.
Он использует Baileys, так как это многопользовательская библиотека WhatsApp на основе WS, и поэтому в будущем может быть использован на Android, например, с помощью Termux.
Идея состоит в том, чтобы использовать его с прокси-сервером: [Клиент (ограниченный доступ) -> WhatsApp -> Сервер -> Прокси -> Интернет]
Заранее извиняюсь, так как JavaScript не является одним из моих основных языков программирования :/
Используйте только в образовательных целях.
Он отправляет TCP-пакеты через текстовые и файловые сообщения WhatsApp, в зависимости от количества символов разбивая их на отдельные текстовые сообщения или файлы.
Чтобы не получить тайм-аут от WhatsApp, по умолчанию установлено ограничение в 20 тысяч символов на сообщение, на данный момент это значение жестко задано в wasocket.js.
Я провел несколько тестов: все, что ниже этого порога, может привести к бану за слишком частое отправление сообщений, а все, что выше 80 тысяч, может вызвать тайм-аут.
Если сетевой пакет превышает лимит (по умолчанию 20 тыс. символов), он будет отправлен как файл, если эта функция включена. Также, если в кеше находится несколько сетевых пакетов, используется тот же критерий.
Файловые сообщения отправляются как бинарные файлы, TCP-ответы объединяются с разделителем и сжимаются с помощью brotli для уменьшения объема данных.
Он кеширует ответы TCP-сокетов, чтобы группировать их и отправлять максимальное количество данных в одном сообщении, тем самым сокращая количество сообщений, повышая скорость и снижая вероятность бана.
До: (без файлов и без кеширования ответов)
curl -x localhost:12345 https://www.youtube.com
- 50-80 messages
- 30-40 seconds
После: (с файлами и кешированием ответов)
curl -x localhost:12345 https://www.youtube.com
- 6-8 messages
- 7-15 seconds
Если вам запрещено отправлять файлы, используйте флаг --disable-files при запуске сервера и клиента, чтобы отключить эту функцию.
Идея пришла, когда я путешествовал по Южной Америке: у операторов обычно ограниченный трафик (несколько ГБ), но WhatsApp часто безлимитный. Я попытался создать эту библиотеку, так как не нашел подходящей на тот момент.
У вас должен быть доступ к двум аккаунтам WhatsApp: один для сервера, другой для клиента.
Вы можете перенаправить локальный порт или использовать внешний прокси.
Клонируйте репозиторий на сервер и установите зависимости Node.js.
cd path/to/wa-tunnelnpm installЗатем вы можете запустить сервер следующей командой, где port — это порт прокси, а host — хост прокси, который вы хотите перенаправить. А number — номер WhatsApp клиента с кодом страны (вместе, без знака +).
npm run server host port number
Вы можете использовать локальный прокси-сервер следующим образом:
npm run server localhost 3128 12345678901
Или вы можете использовать обычный прокси-сервер следующим образом:
npm run server 192.168.0.1 3128 12345678901
Клонируйте репозиторий на сервер и установите зависимости Node.js.
cd path/to/wa-tunnelnpm installЗатем вы можете запустить клиент следующей командой, где port — локальный порт, к которому вы будете подключаться, а number — номер WhatsApp сервера (код страны вместе, без знака +).
npm run client port number
Например
npm run client 8080 1234567890
При первом запуске скрипта Baileys попросит вас отсканировать QR-код с помощью приложения WhatsApp, после этого сессия сохранится для последующего использования.
Возможен сбой, это нормально; после этого просто перезапустите скрипт, и ваш клиент/сервер будет готов!
Когда и клиент, и сервер готовы, вы можете протестировать с помощью curl и увидеть магию.
curl -v -x proxyHost:proxyPort https://httpbin.org/ip
С примером команд будет так:
curl -v -x localhost:8080 https://httpbin.org/ip
Также тестировалось с обычным браузером, например Firefox, работает медленно, но использовать можно.
Вы также можете перенаправлять порты других протоколов, например SSH, настроив сервер так:
npm run server localhost 22 12345678901
А затем подключиться к серверу, используя на клиенте:
ssh root@localhost -p 8080
Чтобы использовать на Android, можно воспользоваться Termux, выполнив следующие команды:
pkg update && pkg upgrade
pkg install git nodejs -y
git clone https://github.com/aleixrodriala/wa-tunnel.git
cd wa-tunnel
npm install
Использование этой библиотеки может привести к блокировке вашего аккаунта WhatsApp, используйте временный номер или на свой страх и риск.