Obter dados de um access point Ubiquiti via rede em Prisma - Linux

Iniciado por adalberto, Julho 18, 2017, 09:31:04 PM

tópico anterior - próximo tópico

adalberto

Fiz essa lib baseada no programa ubidiscover em C.

Lib:  pubidisc.so  ( binário (ubuntu 14.04 32bits)  e fontes para compilar em outra distro);

Link:  http://www.mediafire.com/file/3iusfimiyu30y48/ubdisc.7z

Baixe e descompacte. Na pasta tem um programa pronto: pubidiscover.prisma basta instalar e usar.

Para compilar (Linux) copie a pasta ubidisc para pasta Libs dentro de source_prisma. Execute o arquivo compila.sh no terminal.

Apenas para Linux.

Com esta lib não é necessário fazer procedimentos de baixo nível, ela automaticamente faz a conexão e obtém os dados. Porta é "10001" padrão da Ubiquiti. Para mudar a porta passe explicitamente o parâmetro para a função ub.inicialize('10002'); //ou deixe vazio para o padrão.
Segue um exemplo:



//teste pubidisc

local ub = inclua'pubidisc';

funcao tem_erro(ret, err)
  se nao ret entao
  imprima(err,'\n\nPressione ENTER para sair...');
  leia();
  sis.saia(1);
fim

fim

local ub_data, err = ub.inicialize();

tem_erro(ub_data,err);

local ret, err = ub.procure(ub_data,"192.168.1.21");
tem_erro(ret,err);

local ret, err = ub.perm_broadcast(ub_data);
tem_erro(ret,err);

local ret, err = ub.envie(ub_data);
tem_erro(ret,err);

local tab;

local ret = ub.colete_resposta(ub_data);
se nao ret entao tem_erro(ret,"erro ao coletar resposta"); fim
 
tab = ub.obt_msg(); //lê o dado recebido para uma tabela Prisma

se tipo(tab)=='tabela' entao //imprimindo todos os campos e valores da tabela.
  para i,v em pares(tab) inicio
    imprima(i,':',v);
  fim
senao
  tem_erro(falso,"Falha ao obter mensagem");
fim


//pode usar a tabela como quiser, veja:
poe(string.nconcat('=',50));

se tab.nome_produto entao imprima("\nNome do Produto:\t", tab.nome_produto ) fim;

se tab.ssid_wireless entao imprima("\nNome da rede wireless:\t", tab.ssid_wireless ) fim;

se tab.hwaddr entao imprima("\nMAC do equipamento:\t", tab.hwaddr ) fim;


se ub_data entao
  ub.finalize(ub_data);
fim




Valeu, até mais.

adalberto

Lib Atualizada para versão 0.3  (corrigi alguns erros das funções em C e adicionei novas);

Baixem no mesmo link:  http://www.mediafire.com/file/3iusfimiyu30y48/ubdisc.7z

Novidades:

função  ub.processe('host');
Essa função resume três funções ( procure('host'); perm_broadcast(); e envie() ) ficando bastante simples utilizar a lib agora.

Adicionei também o retorno do modo rede sem fio em string:

const char *UBNT_WIRELESS_MODES[] ={
    "Auto", // \x00
    "adhoc", // \x01
    "Estação", // \x02
    "AP",  //  \x03
    "Repetidor",// \x04
    "Secundário",// \x05
    "Monitor"//  \x06
};


Os nomes dos campos da tabela de dados foram alterados (sugestão do Rafael):

NomeDoAnfitriao   
Endereco   
EnderecoDaMidia
NomeDaRede
ModoSemFio
VersaoDoPrograma
SisId
TempoLigado
TipoDoProduto
EnderecoIpv4


Segue um exemplo simples:



//teste pubidisc

local ub = inclua'pubidisc';

funcao tem_erro(ret, err)
  se nao ret entao
  imprima(err,'\n\nPressione ENTER para sair...');
  leia();
  sis.saia(1);
fim

fim

local ub_data, err = ub.inicialize();

tem_erro(ub_data,err);

local ret, err = ub.processe(ub_data,"255.255.255.255");
tem_erro(ret,err);

local tab;
local ipv4_teste;
enquanto 1 inicio
  local ret,msg = ub.colete_resposta(ub_data);

  se nao ret entao quebre fim;
 
  tab = ub.obt_msg();
  se tipo(tab)=='tabela' entao
   
    poe'\n-------------------------------------------\n'
    para i,v em pares(tab) inicio
      imprima(i,':',v);
    fim
    poe'\n-------------------------------------------\n'
  senao
    tem_erro(falso,"Falha ao obter mensagem");
  fim
fim

se ub_data entao
  ub.finalize(ub_data);
fim