+ Responder ao Tópico



  1. #1

    Padrão 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!

  2. #2

    Padrão Re: MikroTik API PHP: Como remover um cliente específico da access-list?

    Citação Postado originalmente por leopaolo Ver Post
    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, é:
    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, é:
    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, é:
    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
    -
    -
    -
    -
    -
    Última edição por trober; 27-02-2012 às 10:58. Razão: Correção ortográfica e ajuste de formatação

  3. #3

    Padrão 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]");
    Última edição por leopaolo; 27-02-2012 às 12:03. Razão: Correção

  4. #4

    Padrão Re: MikroTik API PHP: Como remover um cliente específico da access-list?

    Citação Postado originalmente por leopaolo Ver Post
    ...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
    -
    -
    -
    -
    -

  5. #5

    Padrão 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!

  6. #6

    Padrão Re: MikroTik API PHP: Como remover um cliente específico da access-list?

    Citação Postado originalmente por leopaolo Ver Post
    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
    -
    -
    -
    -

  7. #7

    Padrão 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!

  8. #8

    Padrão Re: Mikrotik API PHP: Como remover um cliente específico da access-list?

    Citação Postado originalmente por leopaolo Ver Post
    É... 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
    -
    -
    -
    -
    -

  9. #9

    Padrão 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

  10. #10

    Padrão Re: Mikrotik API PHP: Como remover um cliente específico da access-list?

    Citação Postado originalmente por trober Ver Post
    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 Ver Post
    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
    -
    -
    -
    -
    -

  11. #11

    Padrão 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!

  12. #12

    Padrão Re: Mikrotik API PHP: Como remover um cliente específico da access-list?

    Citação Postado originalmente por leopaolo Ver Post
    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
    -
    -
    -
    -
    -