0

所以我通常不发帖,而是花几个小时在论坛上寻找答案——但我完全不知所措。

我想做的事:

真的很简单,我想要一个能够自动更改我的 OnePlus 5 上的 MAC 地址的脚本,我已经拥有了执行此操作所需的所有命令,并且可以轻松地手动完成它,但是要获得一个脚本来完成它吗?好家伙...

我试过的:

这些命令在 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)使用这些命令在 nano 中创建了一个脚本。

2) 使用 chmod +x changeMAC.sh 使脚本可执行

这会在执行时给出“拒绝访问”错误消息。

3) 首先尝试进入 SU,然后执行脚本,这会给出一个“macchanger”未找到错误,因为在调用 su 时 termux 会丢失环境。所以我安装了 tsu 包装器,它允许您调用 tsu 并在维护环境的情况下获取 su,相当于 su --preserve-environment。

然而,这就是我开始把头从桌子上撞下来的地方。

如果我在 termux 终端中执行以下操作:

tsu
./changeMAC.sh

终端只是坐在那里,什么都不做。如果我然后键入“exit”并按回车键,我会收到三个“Access Denied”错误消息。

我试图规避错误:

4) 使用 AutoInput 像用户一样输入 termux,但它拒绝这样做。

5) 直接从 Tasker > Run Shell 执行 shell 命令,但我怀疑这不起作用,因为 macchanger 包没有安装在 tasker shell 的范围内。

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 自定义 ROM

编辑1:

我已经从https://gitlab.com/st42/termux-sudo尝试了“sudo”,但是这需要 su,然后找不到 macchanger,我又回到了原点。

4

1 回答 1

1

它不起作用有几个原因:

  • 当“拒绝访问”时,您只需为脚本的上下文模拟一个环境,如果您检查 /proc/ PID_OF_YOUR_PROCESS /env 您将看到一个空环境
  • 如果您使用GNURootDebian 之类的 chroot 解决方案,您将面临 chroot监狱
  • 在 android 系统上具有 root 权限的脚本 shell 很疯狂,预计会出现问题。
  • 首选使用'&&' 或 '||' 的条件链接执行 在睡眠链进程'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

于 2018-07-09T11:35:40.760 回答