Forwarded from Марков цепи пропил
Dial-up 2.0, или гоним трафик в обход белых списков через звонки в ВК
Пока железки в пути, решил заняться насущным вопросом, который в последнее время что-то обострился.
VK-звонки работают через WebRTC с Selective Forwarding Unit, который пробрасывает SCTP DataChannel между участниками, не заглядывая внутрь. Помимо своего animoji-канала (id:1) VK туда ничего больше не кладёт, поэтому можно создать рядом свой DataChannel (id:2) и использовать его как двунаправленный пайп для произвольных данных. Весь трафик при этом идёт через TURN-серверы VK, которые находятся в белых списках - для DPI это выглядит как обычный звонок.
На стороне Creator'а (тот, у кого есть доступ в интернет) запускается Go relay и hook.js сниппет в браузере. Сниппет хукает RTCPeerConnection, перехватывает ICE-конфигурацию прямо из конструктора, после чего создаётся туннельный DataChannel и бриджится с локальным WebSocket'ом, через который relay раздаёт трафик наружу.
На стороне Joiner'а (тот, кто в зоне белых списков) всё чуть интереснее. Приложение открывает VK-звонок в WebView, поднимает VpnService, который перехватывает весь IP-трафик устройства, прогоняет его через tun2socks, дальше в SOCKS5 прокси на Go, и уже оттуда через WebSocket в тот же DataChannel. Go-часть собирается через gomobile в .aar и линкуется прямо в APK, поэтому можно обойтись без рута/termux.
На speed test получилось добиться 9.57 Мбит/с на скачивание, 4.15 Мбит/с на загрузку с задержкой 14 мс до Брюсселя с мобильной сети.
Есть моменты, которые можно улучшить и автоматизировать, но в целом пока пойдет.
Код/билды здесь [тык]
Пока железки в пути, решил заняться насущным вопросом, который в последнее время что-то обострился.
VK-звонки работают через WebRTC с Selective Forwarding Unit, который пробрасывает SCTP DataChannel между участниками, не заглядывая внутрь. Помимо своего animoji-канала (id:1) VK туда ничего больше не кладёт, поэтому можно создать рядом свой DataChannel (id:2) и использовать его как двунаправленный пайп для произвольных данных. Весь трафик при этом идёт через TURN-серверы VK, которые находятся в белых списках - для DPI это выглядит как обычный звонок.
На стороне Creator'а (тот, у кого есть доступ в интернет) запускается Go relay и hook.js сниппет в браузере. Сниппет хукает RTCPeerConnection, перехватывает ICE-конфигурацию прямо из конструктора, после чего создаётся туннельный DataChannel и бриджится с локальным WebSocket'ом, через который relay раздаёт трафик наружу.
На стороне Joiner'а (тот, кто в зоне белых списков) всё чуть интереснее. Приложение открывает VK-звонок в WebView, поднимает VpnService, который перехватывает весь IP-трафик устройства, прогоняет его через tun2socks, дальше в SOCKS5 прокси на Go, и уже оттуда через WebSocket в тот же DataChannel. Go-часть собирается через gomobile в .aar и линкуется прямо в APK, поэтому можно обойтись без рута/termux.
На speed test получилось добиться 9.57 Мбит/с на скачивание, 4.15 Мбит/с на загрузку с задержкой 14 мс до Брюсселя с мобильной сети.
Есть моменты, которые можно улучшить и автоматизировать, но в целом пока пойдет.
Код/билды здесь [тык]
🔥6 2👍1🤣1 1
#yachan
Problem:
Solution:
Problem:
> В российском коде имена переменных на английском
> Тем временем в России ограничили использование иностранных слов
Solution:
🤣5 2 2👍1
Человек становится взрослым тогда, когда запускает клод код из корня корпоративного монорепозитория.
👏5🤣2👍1 1 1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣4 2👏1 1
#yachan
https://www.rbc.ru/quote/18/06/2026/6a33d4999a79470b9d954c20
Известны последние слова Аркадия Воложа перед уходом из Яндекса:
"Я буду ебать" .
https://www.rbc.ru/quote/18/06/2026/6a33d4999a79470b9d954c20
Известны последние слова Аркадия Воложа перед уходом из Яндекса:
🔥3🤣2👍1 1