Mikrotik API PHP: Como remover um cliente específico da access-list?
Olá pessoal! Antes de qualquer coisa só quero deixar claro que já revirei muito os tópicos e não encontrei o que preciso!
E o que preciso é fácil de descrever e acredito que pra quem saiba, é fácil de resolver também.
Preciso desabilitar um cliente específico da access-list. Como não entendo muito, não sei como trabalhar com o comando "set",
dai tentei remover buscando o MAC especificado e depois adiciona-lo com estado "disabled".
Qualquer maneira dita acima me seria de muita utilidade! Abraços!
Re: MikroTik API PHP: Como remover um cliente específico da access-list?
Citação:
Postado originalmente por
leopaolo
Preciso desabilitar um cliente específico da access-list. Como não entendo muito, não sei como trabalhar com o comando "set", dai tentei remover buscando o MAC especificado e depois adiciona-lo com estado "disabled".
Bom dia.
Removendo um usuário, com base no endereço físico:
Código :
/interface wireless access-list remove [find where mac-address="55:55:55:66:66:66"]
A tradução literal, em linguagem natural (humana), da regra acima, é:
Citação:
Nas listas de acesso de rede sem fio, remover a entrada com identificação que coincida com o endereço físico 55:55:55:66:66:66.
Se você quiser desabilitar uma entrada específica, com base no endereço físico, você pode usar:
Código :
/interface wireless access-list set [find where mac-address="55:55:55:66:66:66"] disabled=yes
A tradução literal, em linguagem natural (humana), da regra acima, é:
Citação:
Nas listas de acesso de rede sem fio, (re)definir a entrada com endereço físico que coincida com 55:55:55:66:66:66, para o estado desabilitado.
Você também pode usar como indexador da sua busca, o campo comentário.
Código :
/interface wireless access-list set [find where comment="contrato-1345"] mac-address="777777888888"
A tradução literal, em linguagem natural (humana), da regra acima, é:
Citação:
Nas listas de acesso de rede sem fio, (re)definir a entrada com comentário que coincida com o texto "contrato-1345", alterando o endereço físico para "77:77:77:88:88:88".
Mostrado como funcionam os comandos set, find e where, você só precisa fazer as chamadas de API, com base nesses comandos.
Enfim, espero ter ajudado.
Saudações,
Trober
-
-
-
-
-
Re: MikroTik API PHP: Como remover um cliente específico da access-list?
Obrigado por responder!
Mas infelizmente não consegui. Tanto o set quanto o remove retornam "=message=no such command". E o add funciona normalmente. Só dá falha nesse comando. O que pode ser?! No php a linha ficou dessa forma:
Código :
$API->write("/interface/wireless/access-list/set [find where mac-address=$mac] disabled=yes");
e
Código :
$API->write("/interface/wireless/access-list/remove [find where mac-address=$mac]");
Re: MikroTik API PHP: Como remover um cliente específico da access-list?
Citação:
Postado originalmente por
leopaolo
...Mas infelizmente não consegui. Tanto o set quanto o remove retornam "=message=no such command". E o add funciona normalmente. Só dá falha nesse comando. O que pode ser?...
Qual a versão do seu RouterOS? Fiz testes com 5.12 e 5.14. Os exemplos que passei talvez não funcionem em versões anteriores.
Outra coisa. Veja se sua variável $mac está sendo processada, uma vez que, ao que parece, está sendo tratada como parte do string inteiro, e nao como variável, portanto, sem retornando um valor.
Saudações,
Trober
-
-
-
-
-
Re: MikroTik API PHP: Como remover um cliente específico da access-list?
Então, esqueci desse problema das versões. Vou atualizar e testar. Quanto a variavel, eu já conferi e está certo. Inclusive testei com o mac inserido diretamente na linha.
Obrigado!
Re: MikroTik API PHP: Como remover um cliente específico da access-list?
Citação:
Postado originalmente por
leopaolo
Então, esqueci desse problema das versões. Vou atualizar e testar. Quanto a variavel, eu já conferi e está certo. Inclusive testei com o mac inserido diretamente na linha.
Obrigado!
Ok! Avise-nos se deu certo :)
Saudações,
Trober
-
-
-
-
Re: Mikrotik API PHP: Como remover um cliente específico da access-list?
É... não funcionou. Na versao 5.14 dá o mesmo erro. Tem como você me passar as chamadas e toda a parte do script que faz rodar? O que me encabula é que o comando add e print funcionam. O remove e set retornam "no such command".
Agradeço a disposição!
Re: Mikrotik API PHP: Como remover um cliente específico da access-list?
Citação:
Postado originalmente por
leopaolo
É... não funcionou. Na versao 5.14 dá o mesmo erro. Tem como você me passar as chamadas e toda a parte do script que faz rodar? O que me encabula é que o comando add e print funcionam. O remove e set retornam "no such command".
Olá.
Supondo que você possui a seguinte entrada em Interface / Wireless / Access-List.
Código :
/interface wireless access-list \
add comment=333 disabled=no forwarding=no \
interface=all mac-address=55:55:55:66:66:66
Para ter retorno filtrado, você faz o comando (API) abaixo:
Código :
/interface/wireless/access-list/print
.proplist=.id
?mac-address=55:55:55:66:66:66
Terá o seguinte retorno:
Código :
<<<
>>> !re
>>> =.id=*18
>>> =mac-address=55:55:55:66:66:66
>>> =interface=all
>>> =signal-range=-120..120
>>> =authentication=true
>>> =forwarding=true
>>> =ap-tx-limit=0
>>> =client-tx-limit=0
>>> =private-algo=none
>>> =private-key=
>>> =private-pre-shared-key=
>>> =management-protection-key=
>>> =disabled=false
>>> =comment=333
>>>
>>> !done
Armazene em uma variável o valor de .id. Ele será necessário para a remoção, conforme exemplo (API) abaixo.
Código :
/interface/wireless/access-list/remove
=.id=*18
Infelizmente, não é possível fazer tudo num só[1] comando de API. É bem mais simples fazer num só comando de console. Particularmente, prefiro usar Python e Paramiko, e não usar APIs do MikroTik RouterOS. justamente pela flexibilidade.
[1] http://forum.mikrotik.com/viewtopic....239737#p239737
Saudações,
Trober
-
-
-
-
-
Re: Mikrotik API PHP: Como remover um cliente específico da access-list?
primeiro voce tem q fazer o FIND para achar o ID ... depois vc remove o ID !!! sao 2 comandos que voce precisa fazer...
aqui faço assim:
Código :
$retorno = $ONDASYS->comm('/ip/firewall/address-list/print',array(
"?list"=>"<nome-da-lista>",
"?address"=>"<ip>"
)
pego esse retorno, e faço um loop para o caso de retornar mais de 1 resultado...
isso é um exemplo com address-list .. é so voce alterar ai para o comando que precisa
Re: Mikrotik API PHP: Como remover um cliente específico da access-list?
Citação:
Postado originalmente por
trober
Infelizmente, não é possível fazer tudo num só comando de API. É bem mais simples fazer num só comando de console. Particularmente, prefiro usar Python e Paramiko, e não usar APIs do MikroTik RouterOS. justamente pela flexibilidade.
Citação:
Postado originalmente por
alexandrecorrea
primeiro voce tem q fazer o FIND para achar o ID ... depois vc remove o ID !!! sao 2 comandos que voce precisa fazer...
Bom dia.
Conforme reforçado pelo Alexandre, são necessárias duas ações para obter um único resultado, usando API.
Torço para que nas próximas versões de API do RouterOS, o processo seja mais inteligente, disparando em uma única linha, com seria em comandos de console.
Saudações,
Trober
-
-
-
-
-
Re: Mikrotik API PHP: Como remover um cliente específico da access-list?
Galera, primeiramente MUIITOO OBRIGADOOO!
Fui juntando o que me foi passado e em três etapas consegui chegar na resolução:
Código PHP:
//Busca ID por MAC
$API->write('/interface/wireless/access-list/print
?mac-address='."$mac".'
.id=.id');
$find = $API->read();
//Remove ID encontrado
foreach ($find as $find):
$API->write('/interface/wireless/access-list/remove', false);
$API->write('=.id='.$find['.id']);
$API->read();
endforeach;
//Adiciona ID Desabilitado
$API->write('/interface/wireless/access-list/add
=forwarding=yes
=disabled=yes
=authentication=yes
=interface='.$interface.'
=comment='.$nome.' - '.$ip.'
=mac-address='.$mac.'');
$ARRAY = $API->read();
print_r($ARRAY);
$API->disconnect();
Dessa forma o Cliente continua cadastrado, porém desconectado.
Vocês não tem ideia do tempo que estou pesquisando sobre isso!
Mas foi bom porque de totalmente leigo já consegui fazer algo útil!
Abraços!
Re: Mikrotik API PHP: Como remover um cliente específico da access-list?
Citação:
Postado originalmente por
leopaolo
Galera, primeiramente MUIITOO OBRIGADOOO!
Fui juntando o que me foi passado e em três etapas consegui chegar na resolução:
[...]
Vocês não tem ideia do tempo que estou pesquisando sobre isso!
Mas foi bom porque de totalmente leigo já consegui fazer algo útil!
Abraços!
Que bom! Ficamos felizes :)
Mas bom mesmo seria se fosse possível fazer em um único passo: pesquisar, obter ID e definir (set) o registro com disabled=yes, tudo numa só operação.
Enfim, novamente, nossas felicitações :)
Saudações,
Trober
-
-
-
-
-