Как изменить ttl на андроид
Перейти к содержимому

Как изменить ttl на андроид

  • автор:

Как изменить 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 схема

Оператор на своей стороне смотрит на значение 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

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

TTL Target support

Переходя по дереву внутрь, и, найдя 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, добавил в автозагрузку.

ScriptManager

Всё! Теперь с этого телефона можно раздавать интернет!

Как сменить TTL на Android?

Нужно сменить TTL со стандартного на 65.
Android 4.4.2 с рут правами.

  • Вопрос задан более трёх лет назад
  • 61648 просмотров

Комментировать

Решения вопроса 1

Влад Животнев @inkvizitor68sl

Linux-сисадмин с 8 летним стажем.

Это не на андроиде менять надо, а на tethering-клиенте повышать TTL на 1.

Ответ написан более трёх лет назад

Как это сделать, Влад? Спасибо.

Ответы на вопрос 3

yurikan

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 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *