我想知道是否有任何方法可用於生成可在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