PHP Telnet resposta array parsing ajuda

Enviada por pedro costa 
pedro costa
PHP Telnet resposta array parsing ajuda
15 de November de 2021 às 09:42PM
Boa tarde Galera

então iniciando no PHP devido a um projeto de TI..


seguinte usamos o PHP telnet para conectar em um dispositivo remoto, para buscar informacões sobre o dispositivo como MAC, ID do dispositivo e outras coisas mais.. porém estou com dificuldades em fazer o parse correto das informacões obtivas e como estou aprendendo PHP ainda me considero um iniciante e venho pedir ajuda dos mestres ...

então estou usando a lib PHPtelnet para conectar


$telnet = new PHPTelnet();
$telnet->show_connect_error=0;

$result = $telnet->Connect($ip, $porta_telnet, $usuario, $senha, false);


após efetuado a conexão e login com sucesso executamos os comandos para obtermos a resposta

/*verifica onus cadastradas no sistema*/
$onu_autenticadas[0] = "show onu auth-info";
$telnet->DoCommand($onu_autenticadas, $onuresposta);
$resposta = explode("\n", $onuresposta); //usando o explode com identificacão EPON0/1 Para informar a seguir o ID da onu e o restante dos dados
for ($h=0; $h<=count($resposta); $h++)

die(print_r($resposta, true)); //printa a resposta na tela.. a seguir ao EPON0/1:

obtemos a seguinte resposta abaixo

Array ( [0] => show onu auth-info [1] => ONU-ID LLID Status MAC Address RTT(TQ) Description Type Authflag Exchange Auth Mode Loid/Pwd [2] => ------ ---- ------ ------------ ------- ----------- ---- -------- -------- --------- -------- [3] => EPON0/1:1 0 online e0:e1:e3:4e:62:48 2168 ZAQUE1GE Auth Finish MAC [4] => EPON0/1:2 1 online 9c:38:e3:03:a3:39 2307 SERGIO2FE+1POTS Auth Finish MAC [5] => [6] => OLT-JD-IPES-NOVA-BARRA(config-pon-0/1)# [7] => OLT-JD-IPES-NOVA-BARRA(config-pon-0/1)# )


basicamente ele imprime no array a resposta partido em vários arrays nessa resposta temos apenas 2 dispositivos, mas existem enderecos que tem 5 ou 6 ou 20 dispositivos conectados e imprime mais arrays. se tentar filtrar o explode pelo EPON0/1: ele filtra menos arrays como na resposta abaixo..


tentei filtrar o array com explode explode("EPON0/1:", $onuresposta); ele reduz para apenas 3 arrays..

array [0] => show onu auth-info ONU-ID LLID Status MAC Address RTT(TQ) Description Type Authflag Exchange Auth Mode Loid/Pwd ------ ---- ------ ------------ ------- ----------- ---- -------- -------- --------- --------
array [1] => 1 0 online e0:e1:e3:4e:62:48 2168 ZAQUE1GE Auth Finish MAC
array [2] => 2 1 online 9c:38:e3:03:a3:39 2307 SERGIO2FE+1POTS Auth Finish MAC OLT-JD-IPES-NOVA-BARRA(config-pon-0/1)# OLT-JD-IPES-NOVA-BARRA(config-pon-0/1)# )


como mencionei acima necessito efetuar um parse para extrair apenas os valores necessários, para que possa salvar em seguida num banco de dados em mysql.. só que não estou conseguindo filtrar corretamente

queria algo do tipo

$onu_id = $resposta["ONU-ID"];
$onu_mac = $resposta["MAC Address"];


mas não funciona porque parece que o array que tem os dados é o array1 e 2 após explode "EPON0/1:"

Qual seria a melhor forma uma string ? array ? par aler os dados resposta em PHP ? para que eu possa filtra informacão especifica ?

segue um link abaixo de uma foto Print do comando Telnet enviado dentro do dispostivio servidor para mostra a lista como fica a resposta

https://ibb.co/XkMkVYL

e abaixo a resposta que obtenho via php print no navegador

https://ibb.co/TbHbpqF



Se algum mestre com mais conhecimento conseguir dar uma dica como seria melhor para efetuar o parse da resposta de forma a que eu possa utilizar essas dados da resposta em outra funcões.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.