Как изменить ttl на андроид
![]()
TTL Editor
Изменяет TTL сетевых пакетов
Simple graphical frontend for iptables to change the TTL (time-to-live) of
packets sent over a given network interface.
- Автор: Kirn Gill
- Лицензия: Apache License 2.0
- Отслеживание проблем
- Исходный код
- Метаданные сборки
Версии
Можно выбрать загрузку приложения в виде APK (доступно по ссылкам ниже), однако следует помнить, что при такой установке вы не сможете получать уведомления об обновлениях, и что это менее безопасный способ скачивания. Советуем установить приложение F-Droid и использовать его.
Версия 1.0.15 (19) предложен Добавлено 2021-06-18
Для этой версии требуется Android 3.0 или новее. Собрано и подписано F-Droid, и гарантированно соответствует исходному коду из архива.
неограниченный доступ к Интернету
Приложение сможет создавать сетевые сокеты и использовать различные сетевые протоколы. Так как браузер и другие приложения обеспечивают средства для отправки данных в Интернет, это разрешение необязательно для отправки данных в Интернет.
android.permission.ACCESS_SUPERUSER
просмотр сетевых подключений
Приложение сможет просматривать информацию о сетевых подключениях, например о том, какие сети доступны и к каким из них вы подключены.
запуск при включении устройства
Приложение сможет запускаться после начальной загрузки системы. Это может привести к увеличению времени включения телефона и уменьшить его быстродействие в связи с постоянной работой приложения.
Версия 1.0.14 (18) — Добавлено 2015-05-03
Для этой версии требуется Android 3.0 или новее. Собрано и подписано F-Droid, и гарантированно соответствует исходному коду из архива.
неограниченный доступ к Интернету
Приложение сможет создавать сетевые сокеты и использовать различные сетевые протоколы. Так как браузер и другие приложения обеспечивают средства для отправки данных в Интернет, это разрешение необязательно для отправки данных в Интернет.
android.permission.ACCESS_SUPERUSER
просмотр сетевых подключений
Приложение сможет просматривать информацию о сетевых подключениях, например о том, какие сети доступны и к каким из них вы подключены.
запуск при включении устройства
Приложение сможет запускаться после начальной загрузки системы. Это может привести к увеличению времени включения телефона и уменьшить его быстродействие в связи с постоянной работой приложения.
Версия 1.0.12 (16) — Добавлено 2014-12-13
Для этой версии требуется Android 3.0 или новее. Собрано и подписано F-Droid, и гарантированно соответствует исходному коду из архива.
неограниченный доступ к Интернету
Приложение сможет создавать сетевые сокеты и использовать различные сетевые протоколы. Так как браузер и другие приложения обеспечивают средства для отправки данных в Интернет, это разрешение необязательно для отправки данных в Интернет.
android.permission.ACCESS_SUPERUSER
просмотр сетевых подключений
Приложение сможет просматривать информацию о сетевых подключениях, например о том, какие сети доступны и к каким из них вы подключены.
запуск при включении устройства
Приложение сможет запускаться после начальной загрузки системы. Это может привести к увеличению времени включения телефона и уменьшить его быстродействие в связи с постоянной работой приложения.
Как навсегда изменить ttl в Android TV приставке?
Чтобы навсегда изменить TTL в Android TV приставке, необходимо внести изменения в файл /etc/sysctl.conf. Этот файл содержит список параметров ядра, которые могут быть изменены с помощью команды sysctl.
Для изменения TTL необходимо добавить в файл /etc/sysctl.conf следующую строку:
net.ipv4.ip_default_ttl =
где — это новое значение TTL. Например, чтобы установить TTL равным 128, необходимо добавить следующую строку:
net.ipv4.ip_default_ttl = 128
После внесения изменений в файл /etc/sysctl.conf необходимо перезагрузить приставку.
Чтобы изменения TTL вступили в силу сразу же, можно использовать следующую команду:
sysctl -w net.ipv4.ip_default_ttl=
например:
sysctl -w net.ipv4.ip_default_ttl=128
Если вы используете Android TV приставку с root-доступом, вы можете использовать следующие команды для изменения TTL:
# Установить TTL равным 128
su -c «echo ‘net.ipv4.ip_default_ttl = 128’ >> /etc/sysctl.conf»
# Перезагрузить приставку
reboot
После выполнения этих команд TTL будет установлен равным 128 и больше не будет сбрасываться на 64 после загрузки приставки.
Вот несколько возможных причин, по которым TTL может сбрасываться на 64 после загрузки приставки:
Приставка использует прошивку, которая не поддерживает изменение TTL.
В файле /etc/sysctl.conf есть ошибка.
Приставка имеет проблемы с сохранением настроек.
Чтобы определить причину проблемы, вы можете попробовать следующие действия:
Убедитесь, что приставка использует последнюю версию прошивки.
Проверьте файл /etc/sysctl.conf на наличие ошибок.
Попробуйте сбросить настройки приставки.
Если вы не можете решить проблему самостоятельно, вы можете обратиться за помощью к производителю приставки.
Фиксация TTL на Android для обхода ограничений на раздачу интернета

Столкнулся с проблемой раздачи интернета с Android-телефона на другие устройства через мобильную точку доступа у некоторых операторов. Оператор или вообще запрещает раздавать интернет, или берет за это деньги. Однако есть способы обойти этот запрет. Здесь расскажу что у меня получилось.
Как оператор узнает, что интернет раздается

Оператор на своей стороне смотрит на значение TTL в заголовках IP-пакетов, приходящих от клиента. Схематично выглядит так:
Если на телефоне открывать в браузере какую-нибудь страничку, то провайдеру от телефона будут приходить пакеты с TTL 64. Такие пакеты он пропускает.
Но если включить мобильную точку доступа, подключиться к ней, например, с планшета, и на планшете открыть страницу, то, проходя через мобильную точку доступа на телефоне TTL будет уменьшаться на 1, и провайдеру будут уходить пакеты с TTL 63, которые он будет отбрасывать. Уменьшение TTL при прохождении через роутер — это стандартизированное поведение роутера, такое поведение предусмотрено стандартом RFC791.
В этой ситуации выхода два — либо на планшете выставлять TTL 65, чтобы, проходя через телефон, провайдеру приходили пакеты с TTL 64, либо на самом телефоне делать так, чтобы он не уменьшал TTL.
Если wi-fi клиент — дектоп-машина с Windows или MacOS, то выставить TTL 65 можно одной командой.
Windows
Создать в реестре ключ
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DefaultTTL
типа REG_DWORD со значением 65 (в десятичной системе)
MacOS
Команда в консоле:
$ sudo sysctl -w net.inet.ip.ttl=65
Но если клиент планшет на iOS или другое устройство, где нельзя просто так выставить TTL, то придется воспользоваться вторым способом — заставить телефон не уменьшать TTL для проходящих через него пакетов. Это может быть не совсем просто.
Учим телефон не уменьшать TTL
Этот способ потребует root-права (инструкция) на android-телефоне или jailbreak на iOS. Т.к. я делал это на Android, то опишу как делать для него. Про iOS здесь инструкции не будет.
Для разных устройств, процедура будет отличаться, я постараюсь рассказать в чем будут заключаться эти отличия. В данном примере я использую OnePlus 3 и Android 8.0 Oreo
Итак, у нас есть Android телефон с root-правами. Узнаем умеет ли ядро системы работать с TTL. Для этого смотрим содержимое двух файлов на телефоне (например с помощью приложения ES Проводник, оно умеет смотреть системные файлы):
/proc/net/ip_tables_matches /proc/net/ip_tables_targets
В обоих должно быть упоминание 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 — это утилиты для сборки кода под опредленную платформу. Узнать какая именно нужна для вашего телефона можно так:
C:\Users\fote>adb shell OnePlus3:/ $ uname -a Linux localhost 3.18.66-perf+ #1 SMP PREEMPT Thu Dec 6 00:54:59 CST 2018 aarch64 OnePlus3:/ $ cat /proc/version Linux version 3.18.66-perf+ (OnePlus@ubuntu-117) (gcc version 4.9.x 20150123 (prerelease) (GCC) ) #1 SMP PREEMPT Thu Dec 6 00:54:59 CST 2018
В моем случае это 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 совпадает с теми версиями которые мы узнали выше.
Теперь идем в консоль и готовимся к компиляции. Установим необходимые тулзы и склонируем репы с тулчейном и исходниками ядра в домашнюю папку:
$sudo apt install build-essential python-minimal libncurses5-dev libncursesw5-dev $cd ~ $git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/ $git clone --branch=QC8996_O_8.0.0 https://github.com/OnePlusOSS/android_kernel_oneplus_msm8996
В исходниках ядра смотрим в папку arch и подбираем нужную архитектуру. В моем случае в этой папке, нет aarch64 , но есть arm64 . Это то же самое, просто называется по другому. Буду использовать эту архитектуру. Указываем ее и путь до бинарей тулчейна в переменных окружения:
$export ARCH=arm64 $export CROSS_COMPILE=/home/fote/aarch64-linux-android-4.9/bin/aarch64-linux-android-
Переменная CROSS_COMPILE именно такая, заканчивается на — . Здесь нет ошибки.
Теперь надо создать конфиг для будущей сборки. Возможные варианты конфигов в моем случае лежат в папке с исходниками ядра в arch/arm64/configs (вместо arm64 может быть ваша архитектура). Вспоминая версию ядра, которая установлена в телефоне, выбираю конфиг msm-perf_defconfig :
$cd ~/android_kernel_oneplus_msm8996/ $make msm-perf_defconfig
После того как конфиг создан, нам надо внести в него изменения, чтобы нужный нам модуль для фиксации TTL скомпилировался. Для этого выполняем:
$make menuconfig

Появится интерактиваная утилита, в которой нужно найти нужный модуль.

Переходя по дереву внутрь, и, найдя TTL Target support , нажать M, чтобы указать, что нужно скомпилировать этот модуль.
Сохраняем конфиг, выходим, и собираем ядро с модулями:
$make $make modules
Если эти команды завершились ошибкой, значит, скорее всего неправильно выбран конфиг, toolchain или сами исходники ядра. Определенные исходники можно собрать только подходящим тулчейном и с подходящим конфигом.
Если ошибок не было, то в папке с исходниками должен появится файл 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 Проводника):
C:\Users\fote>adb shell OnePlus3:/ $ su OnePlus3:/ # insmod /sdcard/xt_HL.ko
Если insmod возвращает ошибку exec format error , значит, скорее всего, неправильно была выбрана версия исходников ядра или архитектура. В dmesg можно узнать подробности ошибки совместимости, и пересобрать под правильную версию.
Если модуль загрузился, можно пробовать зафиксировать TTL:
#iptables -t mangle -A POSTROUTING -o rmnet+ -j TTL --ttl-set 64
, подключиться через мобильную точку доступа и попробовать открыть какую-нибудь страничку в браузере.
И наконец, добавляем в автозагрузку телефона скрипт, который будет включать фиксацию TTL:
#!/system/bin/sh insmod /sdcard/xt_HL.ko iptables -t mangle -A POSTROUTING -o rmnet+ -j TTL --ttl-set 64
Такой скрипт я положил в /sdcard/fixttl.sh , и с помощью приложения ScriptManager, добавил в автозагрузку.

Всё! Теперь с этого телефона можно раздавать интернет!
Как сменить TTL на Android?
Нужно сменить TTL со стандартного на 65.
Android 4.4.2 с рут правами.
- Вопрос задан более трёх лет назад
- 61648 просмотров
Комментировать
Решения вопроса 1
Влад Животнев @inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Это не на андроиде менять надо, а на tethering-клиенте повышать TTL на 1.
Ответ написан более трёх лет назад
Как это сделать, Влад? Спасибо.
Ответы на вопрос 3

TTL Editor
Или же тут /proc/sys/net/ipv4/ip_default_ttl
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
tundr-bragin @tundr-bragin
для yota очень актуально ТТЛ = 65 на клиенте. на винде в ноуте без проблем меняется, но на планшете андроиде без рута значение не меняется. получил рут на планшете — переписал TTL. но.
до перезагрузки всё нормально — после перезагрузки восстанавливается старое значение.
изменял значение прогой с маркета и пробовал рутбраузером открывал файл и правил вручную.
чего мне сделать что бы значение и после перезагрузки оставалось мое? пока поставил файл в закладки на браузере и правлю после перезагрузки каждый раз.
Ответ написан более трёх лет назад
Если прошивка с init.d — сделать скриптик
Можно написать скрипт со строчками по типу:
#!/bin/sh su root echo "65" > /proc/sys/net/ipv4/ip_default_ttl
После этого запихнуть его в cron:
@reboot
По идее, после перезагрузки отработает cron и запустит твой файл скрипта.
Но. Возможно. Не выполнится, потому как права рута не сможет получить.
BlackHacker @BlackHacker
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Компьютерные сети
- +1 ещё
Как открывать много TCP соединений и поддерживать их?
- 3 подписчика
- 6 часов назад
- 790 просмотров