2 Anexo(s)
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, -1, PREG_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.
Anexo 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.
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
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
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.
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
Re: Recuperar Clientes conectados em Dispositivos Ubiquiti - Solução
Citação:
Postado originalmente por
ferreirajr630
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.
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 |