问题

孩子总算是考完试了,是该轻松轻松了,可是白天上班,回家听妈妈说孩子在家里看电视看了好几个小时,担心把他的眼睛给看出问题。

也是,现在的数字电视上节目众多(这不是软文哈),很容易沉迷在这些节目中。就想着看有没有什么办法能限制一下。

思路

以前想过通过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>

设备连接图: