- /4te.me
- Как оператор узнает, что интернет раздается
- Windows
- MacOS
- Учим телефон не уменьшать TTL
- Как собрать модуль ядра
- Как изменить TTL на андроид — пошаговая инструкция
- Что такое TTL на Android
- Определение Time to live
- Как влияет TTL на раздачу Интернета с телефона
- Как узнать значение TTL на андроиде
- Как изменить TTL на андроид через права суперпользователя
- Редактирование данного параметра с помощью TTL Master
- Использование файловых менеджеров с поддержкой Root
- Как изменить ТТЛ на андроидах с помощью X-Plore File Manager
- Возможно ли поменять ТТЛ на андроиде без рут-прав
/4te.me
Столкнулся с проблемой раздачи интернета с Android-телефона на другие устройства, через мобильную точку доступа, у некоторых операторов. Оператор или вообще запрещает раздавать интернет, или берет за это деньги. Однако есть способы обойти этот запрет. Здесь расскажу, что у меня получилось.
Как оператор узнает, что интернет раздается
Оператор на своей стороне смотрит на значение TTL в заголовках IP-пакетов, приходящих от клиента. Схематично выглядит так:
Если на телефоне открывать в браузере какую-нибудь страничку, то провайдеру от телефона будут приходить пакеты с TTL 64. Такие пакеты он пропускает.
Но если включить мобильную точку доступа, подключиться к ней, например, с планшета, и на планшете открыть страницу, то, проходя через мобильную точку доступа на телефоне TTL будет уменьшаться на 1 и провайдеру будут уходить пакеты с TTL 63, которые он будет отбрасывать. Уменьшение TTL при прохождении через роутер — это стандартизированное поведение роутера, такое поведение предусмотрено стандартом RFC791.
В этой ситуации выхода два — либо на планшете выставлять TTL 65, чтобы, проходя через телефон, провайдеру приходили пакеты с TTL 64, либо на самом телефоне делать так, чтобы он не уменьшал TTL.
Если wi-fi клиент — дектоп-машина с Windows или MacOS, то выставить TTL 65 можно одной командой.
Windows
Создать в реестре ключ
типа REG_DWORD со значением 65 (в десятичной системе)
MacOS
Команда в консоле:
Но если клиент планшет на iOS или другое устройство, где нельзя просто так выставить TTL, то придется воспользоваться вторым способом — заставить телефон не уменьшать TTL для проходящих через него пакетов. Это может быть не совсем просто.
Учим телефон не уменьшать TTL
Этот способ потребует root-права (инструкция) на android-телефоне или jailbreak на iOS. Т.к. я делал это на Android, то опишу как делать для него. Про iOS здесь инструкции не будет.
Для разных устройств, процедура будет отличаться, я постараюсь рассказать в чем будут заключаться эти отличия. В данном примере я использую OnePlus 3 и Android 8.0 Oreo
Итак, у нас есть Android телефон с root-правами. Узнаем, умеет ли ядро системы работать с TTL. Для этого смотрим содержимое двух файлов на телефоне (например с помощью приложения ES Проводник, оно умеет смотреть системные файлы):
В обеих должно быть упоминание TTL. В моем случае в ip_tables_targets упоминания ttl не было. Это значит, что ядро не умеет изменять TTL. Чтобы его научить этому, нам понадобится из исходников собрать модуль ядра и загрузить его в телефон.
Как собрать модуль ядра
- ОС — Linux или MacOS (можно собрать и на Windows — см.ниже)
- исходники ядра для конкретного устройства
- toolchain определенной версии и опредленной архитектуры
Я собирал модуль на Windows, но используя, Ubuntu-подсистему в Windows 10. Как ее включить я писал здесь. Если у вас не Win10, то придется ставить Ubuntu на VirtualBox-машину.
Для своего OnePlus 3 я брал исходники ядра здесь — https://github.com/OnePlusOSS/android_kernel_oneplus_msm8996 (msm8996 — это модель процессора Qualcomm Snapdragon 820 MSM8996). Исходники для Android 8.0 Oreo в ветке QC8996_O_8.0.0
Для других Oneplus-ов можно взять их рядом — https://github.com/OnePlusOSS. Для других моделей телефонов надо искать исходики где-то в интернете или на сайте производителя.
Toolchain — это утилиты для сборки кода под опредленную платформу. Узнать какая именно нужна для вашего телефона можно так:
В моем случае это aarch64 . Из этого вывода также понадобится версия gcc: 4.9 и версия ядра: 3.18.66-perf+
Далее идем сюда — https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/ и скачиваем нужный тулчейн. Версии для MacOS можно найти также по этой ссылке. В моем случае я скачал aarch64-linux-android-4.9 , здесь aarch64 и 4.9 совпадает с теми версиями которые мы узнали выше.
Теперь идем в консоль и готовимся к компиляции. Установим необходимые тулзы и склонируем репы с тулчейном и исходниками ядра в домашнюю папку:
В исходниках ядра смотрим в папку arch и подбираем нужную архитектуру. В моем случае в этой папке, нет aarch64 , но есть arm64 . Это то же самое, просто называется по другому. Буду использовать эту архитектуру. Указываем ее и путь до бинарей тулчейна в переменных окружения:
Теперь надо создать конфиг для будущей сборки. Возможные варианты конфигов в моем случае лежат в папке с исходниками ядра в arch/arm64/configs (вместо arm64 может быть ваша архитектура). Вспоминая версию ядра, которая установлена в телефоне, выбираю конфиг msm-perf_defconfig :
После того как конфиг создан, нам надо внести в него изменения, чтобы нужный нам модуль для фиксации TTL скомпилировался. Для этого выполняем:
Появится интерактиваная утилита, в которой нужно найти нужный модуль.
Переходя по дереву внутрь, и, найдя TTL Target support , нажать M, чтобы указать, что нужно скомпилировать этот модуль.
Сохраняем конфиг, выходим и собираем ядро с модулями:
Если ошибок не было, то в папке с исходниками должен появится файл net/netfilter/xt_HL.ko
Вот мой скомпилированный файл для OnePlus 3, Android 8.0.0 — xt_HL.ko. Можно сразу взять его, если совпадает модель телефона и версия системы.
Копируем его на телефон, и через adb shell пытаемся включить его (чтобы в adb shell работал su, надо в /system/build.prop добавить строку ro.debuggable=1 , например с помощью ES Проводника):
Если модуль загрузился, можно пробовать зафиксировать TTL:
И наконец, добавляем в автозагрузку телефона скрипт, который будет включать фиксацию TTL:
Такой скрипт я положил в /sdcard/fixttl.sh , и с помощью приложения ScriptManager, добавил в автозагрузку.
Всё! Теперь с этого телефона можно раздавать интернет!
Источник
Как изменить TTL на андроид — пошаговая инструкция
Практически у всех мобильных операторов предусмотрены ограничения на раздачу интернета с телефона. Поэтому может полностью отсутствовать интернет на подключенном к точке доступа смартфоне, или за раздачу трафика будет списываться предусмотренная провайдером посуточная абонентская плата. Часто разрешают бесплатно раздавать 30-50 Мб в сутки, после чего списывают посуточную оплату в размере 30-50 руб.* Не каждому по карману платить 1500 руб. в месяц за Интернет, да и его скорость не всегда высокая и стабильная. Из-за этого многие стараются обойти данное ограничение. Поэтому ниже в статье описаны все способы редактирования TTL, позволяющие бесплатно раздавать мобильный трафик на андроид-телефонах.
Что такое TTL на Android
Это один из параметров, используемых в технологии пакетной передачи данных между устройствами, о котором подробно написано ниже.
Определение Time to live
TTL — период жизни пакета данных или количество его переходов от одного гаджета к другому. В коммуникационных сетях он выражается числовыми значениями от 0 до 255.
Раздача мобильного Интернета
Главная смысл использования TTL — не позволять пакетам данных долго ходить по сети. При этом в процессе перемещения пакета между различными устройствами этот параметр постоянно изменяется. В iOS и Android гаджетах используется TTL 64, на ПК и телефонах Windows Mobile разработчики устанавливают TTL 128.
Обратите внимание! После каждого перехода от гаджета к гаджету он уменьшается на 1 (при первом переходе 64 — 1 = 63, 128 — 1 = 127). Если после множества переходов данный параметр уменьшается до 0, сопровождаемый им пакет трафика уничтожается.
Принцип уменьшения ТТЛ в процессе передачи данных от различных устройств к точке доступа и далее к провайдеру
Как влияет TTL на раздачу Интернета с телефона
Благодаря этому параметру провайдеры быстро определяют несанкционированную раздачу Интернета, что позволяет им оперативно ограничивать клиентам доступ к Глобальной сети и требовать с них дополнительную плату. Это связано с тем, что в условиях многих тарифов сотовой связи не предусмотрена раздача Интернета.
После подключения клиентами к одному мобильному гаджету, раздающему Интернет нескольким устройствам, провайдер получает от точки доступа TTL 64 или 128, а от остальных гаджетов уменьшенное на 1 значение 63 или 127. Поэтому необходимо сделать так, чтобы этот параметр совпадал на всех подключенных к Wi-Fi сети гаджетах.
Для этого требуется на подключенных к точке доступа устройствах повысить TTL на 1. Например, если модемом является Android-устройство, то необходимо устанавливать на подсоединяемых к нему гаджетах TTL 65. Если точкой доступа является телефон с Windows Mobile или ПК, то на подключенных к ним устройствах требуется устанавливать TTL 129.
Важно! Сначала необходимо проверить на всех смартфонах текущий TTL и только после этого вносить корректировки в работу системы.
Как узнать значение TTL на андроиде
Узнать используемый на гаджете TTL можно с помощью утилиты Terminal Emulator.
Проверка значения параметра в терминале
Делается это так:
- Устанавливают на смартфон утилиту Terminal Emulator (лучше загружать в Play Маркете).
- Запускают программу.
- Вводят в ней — cat /proc/sys/net/ipv4/ip_default_ttl. В терминале отобразится действующий на гаджете TTL.
Выбор в настойках смартфона пункта Wi-Fi
Узнают значение TTL также с помощью ПК.
Параметры текущего Wi-Fi соединения
Делается это так:
- Подключают гаджет к ПК по Wi-Fi.
- Переходят в настройки смартфона.
- После чего выбирают пункт «Wi-Fi».
- Далее открывают свойства текущего подключения, откуда выписывают IP-адрес телефона.
- Потом запускают командную строку на ПК.
- Далее вводят в ней команду «ping», пробел IP-адрес устройства (это может выглядеть так — ping 192.168.238.101) и жмут «Enter». После этого система покажет TTL гаджета.
Проверка значения TTL с помощью командной строки
Как изменить TTL на андроид через права суперпользователя
Сменить TTL на сотовом телефоне с root-доступом можно многими способами. Причем некоторые изменяют его на раздающем гаджете, но лучше этого не делать. Провайдеры знают используемые в гаджетах параметры, поэтому могут в любое время заблокировать доступ к Интернету. В любом случае сначала необходимо проверить, активирован ли на телефоне режим суперпользователя.
Обратите внимание! Это проще сделать с помощью Root Checker или Terminal Emulator. Меню первой программы довольно простое, поэтому сложностей данная процедура не должна вызывать. При использовании второй программы требуется ввести в ней команду «SU», после чего символы # или $ подтвердят наличие root-прав на сотовом телефоне.
Редактирование данного параметра с помощью TTL Master
Если владелец не представляет, как изменить TTL на андроид с помощью TTL Master, то требуется выполнить несколько шагов.
Установить программу из Play Маркета. Открыть ее (в основном окне утилиты будет отображаться используемый на смартфоне параметр).
Далее в настройках утилиты необходимо выбрать подходящий метод переподключения к сети. На нижней картинке выбран режим «Полета».
Выбор в настройках программы типа переподключения к сети
Далее в строку «Введите TTL» нужно вручную ввести требуемое цифровое значение (например, 65 или 129) и нажать вкладку «Применить».
Также нужно в настройках программы включить «Автозапуск», чтобы после перезапуска телефона TTL автоматически изменялся.
Включение «Автозапуска» в настройках утилиты
Потом желательно перезагрузить аппарат.
Важно! Если выхода в Интернет нет, то необходимо переподключить передачу данных на раздающем аппарате. Это связано с тем, что провайдер может временно заблокировать выход в Глобальную сеть.
Также изменить TTL на андроидах позволяет утилита Change TTL.
Использование Change TTL
Делается это так:
- Устанавливают софт на смартфон.
- Отключают гаджет от точки доступа.
- Открывают утилиту. В основном окне отобразится установленный на смартфоне параметр.
- Изменяют этот параметр (необходимы права суперпользователя).
- Перезагружают аппарат.
Обратите внимание! Если не получается изменить данный параметр с помощью этого софта, то требуется в программе, дающей права суперпользователя, разрешить данному софту вносить изменения в работу системы.
Изменить это параметр позволяют и другие аналогичные программы, например, можно использовать утилиту TTL Editor.
Использование файловых менеджеров с поддержкой Root
Также можно быстро изменять TTL файловыми менеджерами, которые поддерживают рут-доступ. Поэтому стоит подробно разобрать процесс изменения TTL Android с помощью самых популярных у пользователей проводников.
Включение режима «Полета» и активация функции рут-проводник
Если не устраивает TTL, смена на андроид с помощью ES File Explorer выглядит так:
- Устанавливают «ES Проводник».
- Включают режим «Полета».
- Запускают утилиту и включают в ней root-доступ.
- Открывают внутреннюю файловую структуру смартфона и переходят в директорию — proc / sys / net / ipv4.
- Находят в этой папке файл ip_default_ttl и открывают его текстовым редактором.
- Изменяют параметр.
- Закрывают файл и сохраняют введенные данные.
- На финальном этапе отключают режим «Полета».
Переход в нужную директорию
Теперь гаджет можно сразу подключать к точке доступа, которая раздает мобильный интернет-трафик.
Как изменить ТТЛ на андроидах с помощью X-Plore File Manager
Делается это так:
- Инсталлируют на гаджет X-plore File Manager.
- Переводят смартфон в режим «Полета».
- Запускают данный файл-менеджер.
- Для фиксации параметра выбирают там Root и переходят в директорию proc / sys / net / ipv4.
- Далее находят в этой папке файл ip_default_ttl и открывают его тестовым редактором.
- Потом меняют цифровое значение, закрывают файл, выключают режим «Полета» и перезапускают гаджет.
Поиск нужного файла
Теперь можно подключать его к раздающему интернет-трафик смартфону.
Таким же образом можно использовать Root Explorer и другие подобные утилиты.
Обратите внимание! Если проблема с ограничением не пропадет, то на основном устройстве необходимо переподключить передачу данных, а на остальных Wi-Fi адаптер. Также нужно активировать режим суперпользователя в проводнике.
Возможно ли поменять ТТЛ на андроиде без рут-прав
Корректировать значение TTL без рут-прав можно, но на многих устройствах эта функция недоступна.
Если владелец смартфона не знает, как поменять ттл на андроиде без прав суперпользователя, то ему нужно сделать следующее:
- Инсталлировать на гаджет Terminal Emulator.
- Открыть терминал и ввести в нем — cat /proс /sys / nеt / ipv4 / ip_dеfаult_ttl.
- Если система гаджета позволяет изменять TTL без root, то этот параметр будет доступен. Необходимо добавить к нему единицу (64 + 1 = 65).
- Перезагрузить аппарат, чтобы настойки вступили в силу.
Важно! Этот способ подходит редко, поэтому проще получить рут-права для внесения изменений в работу OS Android.
Менять TTL в OS андроид можно различными способами, но чаще всего для этого требуются права суперпользователя. Поэтому первым делом необходимо их получить и только после этого изменять параметр. На некоторых смартфонах это удается сделать без рут-прав, но такие модели попадаются редко. В любом случае перед этим необходимо точно определить действующий на раздающем и подключаемом к нему устройстве TTL (на Android-гаджетах этот показатель равен 64, на ПК и телефонах с Windows Mobile — 128, на Cisco устройствах — 255). Также нужно отключать устройство от точки доступа, чтобы провайдер мобильной связи не заблокировал доступ к Сети.
*Цены в статье указаны на апрель 2020 г.
Источник