我的项目:
我正在尝试创建一个专属门户来共享互联网连接,但客户端必须首先同意用户协议。之后,如果他停留在门户页面,他就可以连接互联网。
问题:
我的问题是检查客户是否仍在我的页面上向他提供连接。
为此,我尝试每10秒在我的iptables中添加他的MAC地址作为异常,因为我每15秒刷新一次所有MAC异常(除非@MAC超过两次,我让一次)。
我的文件夹包含:
index.php(显示所有内容的主页)和mac.php(我在其中添加了@mac的异常)
我的mac.php:
<?php
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
$arp=`arp -a $ipAddress`;
$lines=explode(" ", $arp);
$macAddr=$lines[3];
echo exec("sudo /sbin/iptables -t nat -I PREROUTING -m mac --mac-source $macAddr -j ACCEPT");
echo exec("sudo /sbin/iptables -I FORWARD -m mac --mac-source $macAddr -j ACCEPT");
?>
我已经在我的index.php中尝试过了:
<script>
setInterval(
(function () {
$("#mac").load("mac.php");
}), 10000);
</script>
<div id="mac"></div>
这个:
<script>
setInterval(
(function () {
$("#mac").load("mac.php #mac");
}), 10000);
</script>
<div id="mac">
<?php
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
$arp=`arp -a $ipAddress`;
$lines=explode(" ", $arp);
$macAddr=$lines[3];
echo exec("sudo /sbin/iptables -t nat -I PREROUTING -m mac --mac-source $macAddr -j ACCEPT");
echo exec("sudo /sbin/iptables -I FORWARD -m mac --mac-source $macAddr -j ACCEPT");
?>
</div>
我已经尝试过其他选择,比如:
- 将mac.php的最后两行放在用参数($macAddr)调用的mac.php中,并用参数调用mac.php
从现在起,唯一有效的方法是每10秒刷新一次页面。但正如你所知,这不是最好的方式。。。
我在Linux系统上工作。
感谢您的帮助
而true将执行无穷大
mac.php:
<?php
function checkMac(){
$ipAddress=$_SERVER['REMOTE_ADDR'];
$macAddr=false;
$arp=`arp -a $ipAddress`;
$lines=explode(" ", $arp);
$macAddr=$lines[3];
echo exec("sudo /sbin/iptables -t nat -I PREROUTING -m mac --mac-source $macAddr -j ACCEPT");
echo exec("sudo /sbin/iptables -I FORWARD -m mac --mac-source $macAddr -j ACCEPT");
}
?>
您需要调用此页面的所有其他页面。如前
abc.php
<?php
require_once('mac.php');
while(true){
checkMac();
sleep(10); // this should halt for 10 seconds for every loop
}
?>
希望这对你有用。
我用解决了这个问题
<script language="JavaScript">
function mac() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
xmlhttp.responseText;
};
xmlhttp.open("GET", "mac.php", true);
xmlhttp.send();
}
mac();
setInterval(mac, 10000);
</script>