Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pfsense捕获门户凭证生成,无需登录防火墙_Pfsense - Fatal编程技术网

Pfsense捕获门户凭证生成,无需登录防火墙

Pfsense捕获门户凭证生成,无需登录防火墙,pfsense,Pfsense,我想知道是否有任何方法可用于生成可在Pfsense captive portal中兑换的凭单。基本上,我有一个防火墙,可以将互联网连接到客人的wifi路由器。我希望有某种形式的界面,让员工能够创建凭证并将其提供给客户,而无需登录wifi。我在网上找到了两条线索,但都不管用了。有什么建议吗?提前感谢。我刚刚完成了一个简单的php页面。它使用mysql数据库,它只有两个表,一个用于凭证,另一个用于IP地址,我想授予对该页面的访问权 一旦用户选择凭证类型(分钟)并点击“生成”,则会在本地数据库中选择任

我想知道是否有任何方法可用于生成可在Pfsense captive portal中兑换的凭单。基本上,我有一个防火墙,可以将互联网连接到客人的wifi路由器。我希望有某种形式的界面,让员工能够创建凭证并将其提供给客户,而无需登录wifi。我在网上找到了两条线索,但都不管用了。有什么建议吗?提前感谢。

我刚刚完成了一个简单的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>
您必须在“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');
注:字段名称为葡萄牙语

要将.csv文件从PfSense加载到本地数据库,请执行以下操作:

LOAD DATA LOCAL INFILE '/home/infra/Downloads/vouchers.csv' 
INTO TABLE vouchers
LINES TERMINATED BY '\n' (cod_voucher);

希望它能对您有所帮助。

我刚刚完成了一个简单的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>
您必须在“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');
注:字段名称为葡萄牙语

要将.csv文件从PfSense加载到本地数据库,请执行以下操作:

LOAD DATA LOCAL INFILE '/home/infra/Downloads/vouchers.csv' 
INTO TABLE vouchers
LINES TERMINATED BY '\n' (cod_voucher);

希望能对您有所帮助。

我是您提到的第一个项目的开发人员()。除了使用不推荐使用的mysql函数(没有“i”,我已经在发布一个更新来修复这个问题)之外,它应该可以正常工作。你能详细说明一下你面临的问题吗?我是你提到的第一个项目的开发者()。除了使用不推荐使用的mysql函数(没有“i”,我已经在发布一个更新来修复这个问题)之外,它应该可以正常工作。你能详细说明一下你面临的问题吗?