孩子手机防沉迷之定时路由器端断网

学会如何一键给孩子手机(机顶盒,iPad,电子学习机等设备)加上定时断网

在控制端手机一键让孩子手机定时自动断网(电子设备防沉迷)

有什么用

在另外一台手机控制,通过1-2键给手机加上定时断网功能。

优点:一键操作,不需要后续动作;不需要碰触到孩子手机;由于一般情况下手机的WIFI和数据网络是同时打开着的,这种断网,WIFI依旧连接(只是后台路由器丢弃了上网的数据包),手机自动依旧发数据到WIFI(路由器)而得不到返回的数据包。

缺点:部署需要一定计算机知识,步骤太多了点

背景及个人应用

没错,我们有一个拉屎的激励机制,那就是上厕所就可以看手机。

「别笑,这招非常管用,比现代医院医学的治疗积食等等因为不及时主动排便所引发的疾病治疗手段要有效得多」

「我们发现很多跟孩子们的引导,还是在精神层面要重要,要紧急」

但问题来了,孩子会因为贪看手机而长时间(超半小时)呆在厕所,虽然起到拉屎的作用,可副作用也来了。
多次用语言提醒尝试后,无法起到预期效果,又动了气又让气氛不好。
突然想到了iPad是通过OP的iptables命令来丢弃数据包(限制访问外网),何不也把手机的数据包按时或定时限制访问互联网来自动提醒孩子该结束‘上厕所’的时间了。
如何方便家长的手机快速下达:定时10-15分钟后关闭网络,然后最好10分钟后在自动开启手机的网络访问。
shell或者python可以很轻松实现的功能吧;

实在有不会的地方就在线问 ChatGPT

怎么用

目前的前提条件:你家里的路由器,需要能安装python(这个要求比较高)

其实可以把脚本改一改,改成shell版本的,这样普通的K2P之类的100百元级别路由器(刷了系统)即可支持了

  1. 当孩子需要使用电子设备时,提前跟TA们说好:只能使用15分钟(具体可以根据自己情况参数里面调),时间到以后设备会自动断网哦!
    1. 征询TA们同意以后,解锁手机(或机顶盒等电子设备)给孩子使用
  2. 打开家长自己的手机,登录ConnectBot(或者其他的安卓或苹果端ssh工具)回车运行python命令即可。
    1. 一条命令下去,家长就不需要操作任何了,到时间程序会自动给特定的电子设备断网,然后在多长时间后自己恢复(这个时候手机已经上锁)

相关内容

如果您对相关的 openwrt 感兴趣,以下内容可能帮到您:

实现方法

一下以OpenWrt系统的路由器(架设有phthon环境),安卓手机作为例子:

就是下面2方面,其他不需要设置任何了,不需要安装任何APP

设置路由器端

用电脑或手机登录到路由的ssh,

1
2
3
4
5
6
7
cd /root

vi laShiPhone.py

粘贴下面的代码(适当修改)完成后:
esc
:wq)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import subprocess
import time
import sys

def disable_network(mac_address):
subprocess.run(['iptables', '-I', 'FORWARD', '-m', 'mac', '--mac-source', mac_address, '-j', 'DROP'])

def enable_network(mac_address):
subprocess.run(['iptables', '-D', 'FORWARD', '-m', 'mac', '--mac-source', mac_address, '-j', 'DROP'])

# MAC地址,修改为孩子手机的MAC地址(路由器中可以查看)
mac_address = '1E:2B:D2:A8:D1:AA'

enable_network(mac_address)
print('1. Open Network 15min for ' + mac_address + '. Time: ' + time.ctime())

# 等待15分钟
time.sleep(15 * 60)

# 关闭网络连接
disable_network(mac_address)
print('2. Done CLOSED Network, will open it 15min later. Time: ' + time.ctime())

# 等待另外15分钟
time.sleep(15 * 60)
# 打开网络连接
enable_network(mac_address)
print('3. Done Open Network, exit()')
# 退出脚本
sys.exit(0)

如何查阅手机等设备的MAC地址?

打开Openwrt的Web端,在连接设备里面直接查看就好。

我个人的查看URL地址

设置控制端手机

(安卓手机为例子)

  1. 下载安装开源的SSH客户端:ConnectBot
    1. 下载地址:download ConnectBot from our releases page https://github.com/connectbot/connectbot/releases/
  2. (一次性设置)操作ConnectBot生成密钥
    1. 右上角(三个点)
    2. 管理密钥
    3. 右上角(加号)
      1. 输入密钥名字(任意取名用户自我识别)
      2. 默认的RSA
      3. 位数1024足够了
      4. 密码:可以为空,家庭局域网用留空就好
      5. 生成
      6. 按引导提示:在屏幕上乱滑动这样生成随机的密钥(直到进度100%)
      7. 右上角(三个点) “复制公钥”(备用,在第三步中粘贴)
  3. (一次性设置)新建主机连接
    1. 右下角+号

    2. 输入(开启了SSH的):用户名@路由的IP地址,比如:root@192.168.123.1

    3. 点击“使用密钥验证”

      1. 选择上一步中保存的密钥名
    4. “登录后自动运行”

      1. 填写:python /root/laShiPhone.py
    5. 保存

返回路由器端设置免密码登陆

参考 OPENWRT中SSH免密钥登陆(具体步骤)

  1. SSH到路由器中,新建或编辑(如果已经存在authorized_keys文件) /etc/dropbear/authorized_keys
  2. 粘贴在第二步(设置控制端手机 > 操作ConnectBot生成密钥 > 复制公钥)
  3. 保存authorized_keys, 拷贝完毕后,正常登陆一次目标主机。
  4. 退出后又一次登陆,这个时候就配置的ssh密钥能够自动登陆目标主机了(无需输入密码)。

实践操作

  1. 打开控制端手机
  2. 点击保存的主机名(会自动登录)
  3. 按回车,一键启动(登录后会自己显示配置的“登录后自动运行”的命令)

其他情况

有人要说了,加入我的路由器没有python环境,是那种简单的openwrt系统的;

那你可以问问ChatGPT,把脚本改成shell,版本的;无非是执行的使用 chmod一下,然后运行: . /XXX.sh

如果需要留言多的话我在去转化一下shell版本的。

灵感来源

ipad解锁激活锁苹果平板绕激活锁经验

ConnectBot免密码登陆

OpenWrt 下 ssh 密钥登录

过程绕弯路

【可选步骤】为了安全起见,openwrt 创建用户

先ssh连上路由
vim打开passwd文件,命令: vim /etc/passwd
然后光标移到最后插入一行:(vim 按 i 插入)

    用户名:*:用户ID:用户组ID:三个逗号:/home/用户名:/bin/bash

    示例:user123:*:1000:1000:,,,:/home/user123:/bin/bash

    注意全英文,id建议1000以上,不要100以内
    检查无误后保存退出(vim按esc退出编辑,然后输入:wq保存退出,注意英文)

    然后编辑group文件,命令: vim /etc/group
    同样最后一行插入:

    用户组名:*:用户组ID:

    示例:user123:*:1000:


    vim /etc/passwd
    carlzeng:*:7000:7000:,,,:/home/carlzeng:/bin/bash
    passwd carlzeng
        直接回车,这样把密码设置为空!
    vim /etc/group
        carlzeng:*:0: 

测试发现Termius弊端,
    snippet 很多限制,毕竟是收费软件

切换回开源的ConnectBot,原来用密钥登录也是那么简单,而且还更安全!

改进

用手机端打开ConnectBot(配置好了自动登录路由器)直接就到了输入命令的(并且设置了预先输好了默认的命令),已经挺方便了;通过维护不同的客户端,来选择性的临时关闭特定电子设备的外网访问。

可是发现一旦手机退出ConnectBot,那条命令就不执行了(不管是执行过程在15分钟的等待时间还是在那里)

如何让python程序后台运行

使用nohup(no hand up),在命令前面加一个nohup程序就会进入后台执行,我们事后查看nohup.out可以看到些信息,或ps可以检查“python /root/laShiPhone.py”这条命令是否存在(约30分钟后消失)

默认的执行变成:nohup python /root/laShiPhone.py

下一步

正在寻找,思路:

手机刷入 防沉迷 系统

小米K40

安卓 屏幕时间管理 app

手机 青少年模式

儿童空间

下载了一加的兄弟Oppo退出的儿童空间,发现安装时提示:无法解析包。

回到原始的方案,既然已经root了,直接删除系统自带的浏览器、商店等等系统自带应用。

删除商店

我在/system/app下找到了一加从腾讯浏览器修改来的系统自带浏览器,删除。

“商店”怎么也找不到,解决办法,上adb工具;

  1. 连接一加5T到电脑
  2. 用adb管理应用(android系统包):
1
2
3
4
5
6
7
.ssh % adb -s 5d817fad shell pm list packages | grep market                 
package:com.oppo.market

#得出应该使用的命令是:adb -s 5d817fad shell pm uninstall -k --user 0 com.oppo.market

> adb -s 5d817fad shell pm uninstall -k --user 0 com.oppo.market
Success

后来得知,有些是安装在: /system/reserve

这个pm uninstall works on all Android devices在所有的安卓系统上都是通用的,都是可以使用的

本章节感谢

https://www.v2ex.com/t/699878

精简oppo系统 coloros13 adb停用删除自带app,卸载快应用

屏幕时间管理

屏幕时间管理app.apk
测试结果是:这个APP不支持root的手机