+ Responder ao Tópico



  1. #1

    Padrão Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Galera venho trazer uma solução que a dias me atormentava.
    Problema: tenho uma torre na zona rural com 4 bullets 2 conectado a painéis aquário, tenho poucos clientes conectado nesses bullets, o problema é que eu não conseguia saber quem eram os usuarios que estavam conectados neste bullet (ou pelo menos era bem complicado saber quem estava conectado). Por isso resolvi automatizar esta tarefa, coisa um tanto quanto simples de se falar, mas não muito de se fazer.
    A solução encontrada foi capturar a pagina "stalist.html", que retorna os MAC Address conectados neste bullet, e depois tratar estes mac's e cruza-los com meu banco de dados de usuários.
    Bom partindo deste ponto criei uma função em php para fazer este processo, foi um tanto quanto dolorido fazer isso (por conta dos socos na mesa), mas consegui chegar a uma solução para esta tarefa.
    Segue abaixo o arquivo de função

    conectado.php
    Código PHP:
    <?php
    #################################################
    #            Classe para retornar               #
    #              o MAC Address de                 #
    #            Equipamentos Ubiquiti              #
    #            para cruzamento de dados           #
    #              com banco de dados               #
    #                                               #
    #              Desenvolvido por                 #
    #             Fernando Piovezan                 #
    #                Licença GPL                    #
    #################################################

    #################################################
    #                 Agradecimentos                #
    #duzao7667 -> forum.imasters.com.br             #
    #pisicohtico -> forum.clubedohardware.com.br    #
    #Manual PHP -> php.net                          #
    #Avaliador de ER -> arquivodecodigos.net        #
    #André D. Molin -> forum.imasters.com.br        #
    #Everton da Rosa -> phpbrasil.com               #
    #                                               #
    #################################################


    class retornaInfo {
          
    //variavel passada para a classe
          
    public $site;
       
    //função para retornar o mac address
       
    function retornaMac() {
          
    $url file_get_contents($this->site);    //estrai o site da url passada
             
    $pattern1 "/([0-9a-fA-F]{2}:{1}){5}[0-9a-fA-F]{2}/"//cria o primeiro pattern para expressao regular
             
    $pattern2 "/<[^>]*[^\/]>/i"//cria o segundo pattern para expressao regular
             
    $html preg_split($pattern2$url, -1PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE);
                for(
    $i=0;$i<count($html);$i++) {
                   
    preg_match($pattern1$html[$i], $resultado);
                      if (!empty(
    $resultado)) {
                         
    $mac[] = $html[$i];
                   }
             }
       return 
    $mac//retorna o endereço mac
       
    }
       
    //função para retornar o nivel de sinal
       
    function retornaSinal () {
          
    $url file_get_contents($this->site); //estrai o site da url passada
          
    $pattern3 "/<\/a[^>]*><\/td[^>]*><td[^>]*>(.*?)<\/td>/"//cria o terceiro pattern para expressao regular
          
    preg_match_all($pattern3$url$sinal); //retira o sinal por meio de expressao regular
       
    return $sinal[1]; //retorna o nivel do sinal
       
    }
    }
    ?>
    O que isto faz é pegar pagina "stalist.html" e trata-la para retornar o MAC Addres e o sinal em "-Dbm" e retornar um array com estas informações. Feito isso podemos utilizar estas informações do jeito que quiser e puder (as opções são muitas).

    para usar esta função é simples, como podem ver esta Orientado a Objeto então temos que trata-la com classe.

    Código PHP:
            $site "http://" .$nomeUsuario":" .$senhaUsuario"@" .$ip"/stalist.cgi";
            include_once 
    "conectado.php";
           
            
    $obj = new retornaInfo;
            
    $obj->site $site;

            
    $mac $obj->retornaMac();
            
    $sinal $obj->retornaSinal(); 
    a variável $site deve ter estes critérios pois precisa se autenticar para poder retornar a pagina
    - explicação das variaveis

    $nomeUsuario -> nome de usuario de conexão os Bullet
    $senhaUsuario -> senha do usuario de conexao ao Bullet
    $ip -> Ip do bullet para se conectar

    Uso estas variáveis, pois posso utilizar quantos radio quiser com esta mesma função, hoje uso com 4 bullet's mas pretendo aumentar para uns 8 - 12.
    abaixo um exemplo do uso desta função em página em ambiente de execução.

    Clique na imagem para uma versão maior

Nome:	         screen.jpg
Visualizações:	307
Tamanho: 	22,1 KB
ID:      	21161

    Bom espero que ajude a comunidade ai que utiliza Ubiquiti

    Obs. Foi testado em Bullet 2, Nano 2, Nano 5.
    Obs2. Não sou nenhuma fera em php, só sou muito, muito persistente.

    Qualquer duvida postem ai que na medida do possível eu ajudo.
    Arquivos Anexos Arquivos Anexos

  2. #2

    Padrão Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Parabéns fernandop, estou tb com vários nanos na rede onde fico olhando direto no nano mesmo, isso vai ajudar muito a toda a comunidade.

    Att.Juliano

  3. #3

    Padrão Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Fala Juliano, esqueci de colocar no tópico, o único problema um tanto quanto grave que encontrei foi que tive que salvar a senha de acesso em texto plano isso é uma brecha de segurança, mas estou procurando uma maneira de criptografar ela e depois descriptografar.

    Att

  4. #4

    Padrão Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Boa iniciativa de postar essa solução, obrigado por compartilhar. Não conheço php mas tenho um amigo fera vou falar com ele a respeito da senha, caso ache algo posto aqui.

  5. #5

    Padrão Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Parabens meu caro muinto bom poderia passar esse codigo de recuperação da imagem que sr. anexou agradeceria muinto obrigado

  6. #6

    Padrão Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Citação Postado originalmente por ferreirajr630 Ver Post
    Parabens meu caro muinto bom poderia passar esse codigo de recuperação da imagem que sr. anexou agradeceria muinto obrigado
    Cara poderia até disponibilizar sim, mas o problema é que preciso limpar este codigo primeiro, ele esta muito desorganizado e também tenho que tirar algumas coisas pessoais do mesmo. Se puder aguardar eu posto ele daqui uns dias.

  7. #7

    Padrão Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução

    Meu caro apareceu esse erro pode por favor me dar uma ajuda
    1 0.0014 366944 {main}( ) ..\clientes.php:0
    2 0.0023 377552 retornaInfo->retornaMac( ) ..\clientes.php:11
    3 0.0023 377584 file_get_contents ( ) ..\conectado.php:31

    1 0.0014 366944 {main}( ) ..\clientes.php:0
    2 0.0023 377552 retornaInfo->retornaMac( ) ..\clientes.php:11

    1 0.0014 366944 {main}( ) ..\clientes.php:0
    2 0.0369 377944 retornaInfo->retornaSinal( ) ..\clientes.php:12
    3 0.0369 377976 file_get_contents ( ) ..\conectado.php:45