问题
孩子总算是考完试了,是该轻松轻松了,可是白天上班,回家听妈妈说孩子在家里看电视看了好几个小时,担心把他的眼睛给看出问题。
也是,现在的数字电视上节目众多(这不是软文哈),很容易沉迷在这些节目中。就想着看有没有什么办法能限制一下。
思路
以前想过通过IPTV的路由器上对端口的控制实现,但是发现只有显示,无法进行控制。无意中发现我把wifi路由器和IPTV路由器连接时,IPTV启动时出现故障提醒。后来分析了下,发现原来是机顶盒在进行连接时,我的无限路由器上的DHCP主动给分配了个地址,而这个地址肯定是无法连接IPTV服务器的,所以出现了这样的提示。这样做的结果就是父母在家也不能看电视了,如果被聪明的孩子发现只要拔掉那根破网线就可以正常的话,也是很容易被破解掉的。
验证
于是我就想如果通过手工控制DHCP的状态就可以间接实现对IPTV的控制了。于是就把无线路由的dhcp停掉,然后在我的RaspBerryPI上启动了一个DHCP server。然后添加sudo 的权限给web server的运行属组,接着又写了个丑陋而有粗糙的界面放到web server下。这样平常因为DHCP 默认是启动的,所以电视是看不成的,如果要看的话,只需要拿出手机,点下unblock,这样就可以了。
为了避免DHCP被停掉而造成其他的wifi终端无法连接,我在crontab里放了个记录,确保会自动把DHCP给启动起来。
大致实现就是这样,只是一个概念验证,没考虑安全方面的问题。
1<html>
2 <h1>
3 <?php
4 function start() {
5 system(‘sudo /etc/init.d/udhcpd start >/dev/null’,$ret);
6 }
7
8 function stop() {
9 system(‘sudo /etc/init.d/udhcpd stop >/dev/null’,$ret);
10 }
11
12 system(‘ps -ef | grep dhcpd | grep -v grep >/dev/null’, $retval);
13 if ($retval == 0 ) {
14 echo “<font color=RED>TV is blocked!";
15 }else{
16 echo “<font color=GREEN> TV is allowed!";
17 }
18
19 if (
20 (isset($_POST[“block”])
21 or (isset($_POST[“unblock”]))
22 )
23 ) {
24 if(isset($_POST[“block”])){
25 echo start();}
26 else{
27 stop();
28 } $page = $_SERVER[‘PHP_SELF’];
29 header(“Refresh: 0; url=$page”);;
30 }
31 ?>
32 <form action=“tvm.php” method=“POST”>
33 <input type=“submit” name=“block” value=“Block”>
34 <input type=“submit” name=“unblock” value=“Unblock”>
35 </form>
36 </h1>
37</html>
设备连接图: