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

发布时间 2023-12-10 22:00:20作者: CarlZeng
title: 孩子手机防沉迷之定时路由器端断网
tags: [手机,防沉迷,python,shell,路由器]
新版原文: https://www.carlzeng.top/search?q=手机防沉迷之定时路由器端断网
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
date: 2023-12-07 16:25:36
categories: 路由器

学会如何一键给孩子手机(机顶盒,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,

cd /root

vi laShiPhone.py

粘贴下面的代码(适当修改)完成后:
esc
:wq)
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,原来用密钥登录也是那么简单,而且还更安全!