我想知道是否有任何方法可用于生成可在Pfsense强制门户中兑换的代金券。基本上我有一个防火墙,它将互联网连接到一个无线路由器供客人使用。我想为工作人员提供某种形式的界面,以便能够创建优惠券并将其提供给客户,而无需登录到无线网络。我在网上找到了两条线索,https://sourceforge.net/projects/vouchergen/和https://github.com/jpardobl/pfsense_vouchers_rest,但他们不再工作。有什么建议?提前致谢。Pfsense无需登录防火墙即可生成强制门户代金券
1
A
回答
0
我刚写完一个简单的PHP页面来完成这个任务。它与一个mysql数据库一起工作,该数据库只有两个表,一个用于代金券,另一个用于我想授予访问此页面IP地址的表。
用户选择凭证类型(分钟)并点击“生成”后,它会选择本地数据库中的任何有效凭证并将其标记为已使用。
下面是代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vouchers DSA</title>
</head>
<body>
<?php
function gera_form(){
?>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<?php
echo '<h2 align="center">Gerador de vouchers para WiFi</center></h2>';
echo '<p align="center">Selecione a duração desejada e clique em "Gerar Voucher"</center></p>';
echo '<br><br>';
echo '<div align="center">';
echo '<form method="POST">';
echo '<select name="state">';
echo '<option value="--">Duração</option>';
echo '<option value="30">1/2 hora</option>';
echo '<option value="60">1 hora</option>';
echo '<option value="120">2 horas</option>';
echo '<option value="1440">1 dia</option>';
echo '<option value="43200">1 mês</option>';
echo '</select>';
echo '<br><br><input type="submit" value="Gerar Voucher">';
echo '</form> </center>';
echo '</div>';
}
$ip=get_client_ip();
$hostname="localhost";
$username="root";
$password="771477";
$db = "banco_voucher";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
function get_voucher($valor, $ip, $dbh){
$hostname="localhost";
$username="root";
$password="771477";
$db = "banco_voucher";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query("update vouchers
set solicitado_por =
(select id_usuario from usuarios where ip_maquina = '$ip'),
solicitado_em = now(),
validade = 0
where validade != 0 and minutos = '$valor'
limit 1;") as $row);
}
function get_time($minutos){
$dur = "";
if ($minutos == 30) {
$dur = "1/2 hora";
} else if ($minutos == 60) {
$dur = "1 hora";
} else if ($minutos == 120) {
$dur = "2 horas";
} else if ($minutos == 1440) {
$dur = "1 dia";
} else if ($minutos == 43200) {
$dur = "1 mes";
} else {
$dur = "desconhecida";
}
return $dur;
}
function gera_tabela($ip){
$hostname="localhost";
$username="root";
$password="771477";
$db = "banco_voucher";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
$historico = array("<table>
<tr>
<th>Departamento</th>
<th>Voucher</th>
<th>Duracao</th>
<th>Data</th>
</tr>",);
$teste = array ("a");
try {
$select = $dbh->query("select b.departamento,
a.cod_voucher, a.minutos,
date_format(a.solicitado_em, '%d/%c/%Y - %H:%i:%s') as stamp
from vouchers as a
right join usuarios as b on (solicitado_por = id_usuario)
where ip_maquina = '$ip' and cod_voucher is not null
order by stamp desc limit 10;");
} catch (Exception $exc) {
echo $exc->getTraceAsString();
}
$result = $select->fetchAll();
echo "<br><br>";
echo $historico[0];
$i = 0;
foreach($result as $row){
$dur = get_time($row['minutos']);
array_push($historico, "<tr><td>".$row['departamento']."</td>"
. "<td>".$row['cod_voucher']."</td>"
. "<td>".$dur."</td>"
. "<td>".$row['stamp']."</td>"
. "</tr>");
$i++;
echo $historico[$i];
}
echo "</table>";
}
foreach($dbh->query("select-count(ip_maquina) as ip from usuarios where ip_maquina = '$ip';") as $row){
if($row['ip'] == 0){
echo "<h1>Acesso negado</h1>";
echo "<p>Sua estação de trabalho não tem as permissões de acesso necessárias."
. "<br>Contate a equipe de TI para mais informações.</p><hr>";
echo "<address>Gestão de vouchers - Divisão Sul Americana da IASD</address>";
}
else if($row['ip'] != 0){
gera_form();
get_voucher($_POST['state'], $ip);
gera_tabela($ip);
if(isset($_POST['state'])){
header("Location:SandBox.php");
unset($_POST['state']);
if($_POST['state']=="--"){
echo "Escolha um tempo apropriado para a validade do voucher.";
}
}
}
}
?>
</body>
</html>
因为这是我的第一个PHP页面时,它可能是一个有经验的PHP程序员的眼睛一场灾难,但它是相当的功能和不正确的,你似乎什么需要。
只需将上面的代码复制到一个名为SandBox.php的文件中,并放在您的Apache/www/html文件夹中即可。
对于凭证::
在MySQL中的表可以使用这些代码来创建
CREATE TABLE `vouchers` (
`id_voucher` int(11) NOT NULL AUTO_INCREMENT,
`cod_voucher` varchar(10) DEFAULT NULL,
`validade` bit(1) DEFAULT NULL,
`solicitado_em` varchar(20) DEFAULT NULL,
`solicitado_por` varchar(15) DEFAULT NULL,
`minutos` int(11) DEFAULT NULL,
PRIMARY KEY (`id_voucher`)
) ENGINE=InnoDB AUTO_INCREMENT=131073 DEFAULT CHARSET=utf8;
必须做在列“validade”设定值的手动更新“1” [意所有优惠券均有效]。在被页面选中之后,它将被更新为'0'[意思是使用]。
update vouchers set validade = 1;
对于那些将被允许访问该页面的IP地址:
CREATE TABLE `usuarios` (
`id_usuario` int(11) NOT NULL AUTO_INCREMENT,
`ip_maquina` varchar(15) DEFAULT NULL,
`departamento` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id_usuario`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
你必须在这个表做手工插入,解析管理机的IP地址和它的名字/位置/标签/无论你想用作人类可读的ID。
insert into usuarios(ip_maquina, departamento) values ('10.91.198.12', 'Cyber Cafe');
PS .:该字段的名称是葡萄牙语。
从PfSense .csv文件加载到本地数据库:
LOAD DATA LOCAL INFILE '/home/infra/Downloads/vouchers.csv'
INTO TABLE vouchers
LINES TERMINATED BY '\n' (cod_voucher);
希望它可以帮助你。
相关问题
- 1. pfsense 2.1.2防火墙端口转发
- 2. 无需强制用户登录即可访问图表数据
- 3. 软件防火墙“登录”功能
- 4. 在iis 7.0中写入客户端ip登录防火墙
- 5. Firebase云防火墙+验证:只写登录用户
- 6. 谷歌云实例防火墙无法登录SSH
- 7. 强制用户输入登录,即使用Facebook登录连接
- 8. 无需登录即可运行Publish-AzureRmVMDscConfiguration
- 9. 无需登录即可获取Gmail rss
- 10. 新门户上的SQL Azure防火墙规则
- 11. 新门户上的SQL Azure防火墙规则(2014)
- 12. 詹金斯与代理防火墙下的常春藤
- 13. Laravel - 无需登录即可验证用户身份
- 14. 无需通过防火墙进行RDP访问即可访问新虚拟机的控制台?
- 15. 如何跳过强制门户登录wifi
- 16. 登录到公司的强制网络门户与原生iPhone应用程序
- 17. Azure SQL数据库防火墙和登录错误
- 18. symfony 3 + FosUserBundle防火墙页面不显示登录表单
- 19. 两个防火墙 - 登录后重定向 - fosuser
- 20. Symfony防火墙不重定向我,如果我不登录
- 21. Symfony2:FOSUserBundle - 单个防火墙,多个登录表单/入口点
- 22. 限制用户无需使用javascript登录即可访问页面
- 23. HttpWebRequest.Create和防火墙
- 24. 防火墙fms rtmpt
- 25. TcpListener.AcceptTcpClient和防火墙
- 26. 防火墙安全
- 27. postgresql和防火墙
- 28. Symfony2防火墙security.yml
- 29. WCF和防火墙
- 30. MSDTC和防火墙
我是您提到的第一个项目的开发人员(https://sourceforge.net/projects/vouchergen/)。除了使用不推荐的mysql_-functions(没有“我”,我已经在发布修复这个问题的更新),它应该可以正常工作。你能详细说明你所面临的问题吗? – user1447577