Arhn - архитектура программирования

Не удается выполнить скрипт в Termux, для которого требуются разрешения SU

Поэтому я обычно не пишу, вместо этого трачу часы на форумы в поисках ответа, но я в полной растерянности.

Что я хочу сделать:

На самом деле все очень просто, мне нужен скрипт, который автоматически изменит MAC-адрес на моем OnePlus 5, у меня уже есть все необходимые для этого команды, и я могу легко выполнить это вручную, получив скрипт для выполнения это однако? О, парень...

Что я пробовал:

Это команды, которые при запуске в termux вручную дают мне нужный результат:

ip link set dev wlan0 down

macchanger --random wlan0

ip link set dev wlan0 up

Теперь причина, по которой я не использую ip link set dev wlan0 address xx:xx:xx:xx:xx:xx, заключается в том, что тогда мне нужно ввести адрес, тогда как macchanger может сгенерировать его автоматически. (У меня нет Unix-foo для программной генерации MAC-адреса).

Итак, я сделал следующее в хронологическом порядке:

1) Создал скрипт в нано с этими командами.

2) Сделал скрипт исполняемым с помощью chmod +x changeMAC.sh

Это дает сообщение об ошибке «Отказано в доступе» при выполнении.

3) Попытался сначала войти в SU, а затем выполнить скрипт, это дает ошибку «macchanger», не найденную, поскольку termux теряет среду при вызове su. Поэтому я установил оболочку tsu, которая позволяет вам вызывать tsu и получать su с поддерживаемой средой, эквивалентной su --preserve-environment.

Однако именно здесь я начал биться головой о стол.

Если я сделаю следующее в терминале termux:

tsu
./changeMAC.sh

Терминал просто сидит и ничего не делает. Если я затем наберу «выход» и нажму «Ввод», я получу три сообщения об ошибке «Отказано в доступе».

Я пытался обойти ошибку:

4) Использование AutoInput для ввода в termux как пользователь, но он отказался это делать.

5) Выполнение команд оболочки непосредственно из Tasker > Run Shell, но я подозреваю, что это не работает, потому что пакет macchanger не установлен в области действия оболочки Tasker.

6) Использование su --preserve-environment напрямую, но происходит то же самое!

Итак, вкратце мой сценарий выглядит так:

\#!/data/data/com.termux/files/usr/bin/sh

sleep 1

ip link set dev wlan0 down

sleep 1

macchanger --random wlan0

sleep 1

ip link set dev wlan0 up

exit

но:

1) Не работает со стандартными привилегиями

2) Не выполняется, когда используется tsu/su --preserve-environment, выдавая ошибки при выходе из экземпляра tsu, почти как если бы он ожидал завершения экземпляра перед выполнением ...

3) Отлично работает при выполнении вручную из экземпляра tsu.

Я думаю, что просто недостаточно знаю тонкости Unix/Linux/Android, чтобы понять, почему это не работает, и, следовательно, исправить это.

Любая помощь приветствуется.

Лучший,

H.

Детали телефона:

OnePlus 5, рутированный с помощью Magisk

Ядро ElementalX

xXx NoLimits Кастомное ПЗУ

Редактировать 1:

Я попробовал «sudo» с https://gitlab.com/st42/termux-sudo. однако для этого требуется su, который затем не может найти macchanger, и я вернулся к исходной точке.

29.06.2018

Ответы:


1

Существует несколько причин, по которым он не работает:

  • Когда «Доступ запрещен», вы просто имитируете окружение для контекста вашего скрипта, если вы проверите /proc/PID_OF_YOUR_PROCESS/env, вы увидите пустое окружение
  • Если вы используете решение chroot, такое как GNURootDebian, вы столкнетесь с chroot тюрьма
  • Скриптовая оболочка с правами root в системе Android дикая, ожидайте проблемы.
  • Предпочитать выполнение условной цепочки с помощью '&&' или '||' процессу цепочки ожидания 'command1;sleep(1);command2;sleep(1)'

Самое простое решение, которое я могу вам предложить, это:

Создайте простое приложение Android и добавьте в свою основную деятельность:

protected void      onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        String[] env = {"PATH=/su/bin:/sbin:/system/sbin:/system/bin:/su/xbin:/system/xbin:/system/xbin/"};
        DataOutputStream outputStream;
        outputStream = new DataOutputStream(Runtime.getRuntime().exec("su", env).getOutputStream());
        outputStream.writeBytes("ip link set dev wlan0 down && macchanger --random wlan0 && ip link set dev wlan0 up && exit \n");
        outputStream.flush();
        Toast.makeText(this, "Macchanger DONE", Toast.LENGTH_SHORT).show();
    } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(this, "Macchanger Error", Toast.LENGTH_SHORT).show();
    }
}

Это работает на Nexus 5 Rooter, но вам обязательно нужно добавить кнопку для управления функциональностью, и почему бы не распечатать новый Mac, который вы можете найти здесь:

  • cat /sys/class/net/NAME_INTERFACE/address

И если вы хотите автоматизировать это, та же логика, но с Service, а не Activity.

09.07.2018
  • Отлично, я раньше не писал приложения для Android, но это похоже на простой способ начать. Спасибо за совет. 10.07.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..