Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Question Registrando Log

    Bom dia, comecei a usar o mikrotik a pouco tempo (em uma rb433), gostaria de ajuda para resolver o seguinte problema:

    A RB (em bridge) tem 2 cartoes, e os mac são liberados (Access list) para conectar nos respectivos cartões, o problema é que antes de eu entrar na empresa esse controle era meio "largado", (pra se ter uma ideia existem mais de 200 macs liberados somando os dois cartões), eu gostaria de fazer um log, que registrasse o IP+MAC de quem conectasse (eu excluiria todos os mac's liberados, deixaria os cartões livres para qualquer um conectar, verificaria no log e começaria a liberar clientes por cliente novamente)

    Não tenho nem ideia se é possivel fazer esse log (como fazer), se alguem puder me ajudar a faze-lo ou tiver outra ideia pra me ajudar a resolver o problema.


    Obrigado.
    Última edição por zoom18; 02-08-2011 às 10:19.

  2. #2

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Bom dia, comecei a usar o mikrotik a pouco tempo (em uma rb433), gostaria de ajuda para resolver o seguinte problema:

    A RB (em bridge) tem 2 cartoes, e os mac são liberados (Access list) para conectar nos respectivos cartões, o problema é que antes de eu entrar na empresa esse controle era meio "largado", (pra se ter uma ideia existem mais de 200 macs liberados somando os dois cartões), eu gostaria de fazer um log, que registrasse o IP+MAC de quem conectasse (eu excluiria todos os mac's liberados, deixaria os cartões livres para qualquer um conectar, verificaria no log e começaria a liberar clientes por cliente novamente)

    Não tenho nem ideia se é possivel fazer esse log (como fazer), se alguem puder me ajudar a faze-lo ou tiver outra ideia pra me ajudar a resolver o problema.


    Obrigado.
    Bom dia [zoom18].

    Há provedores que atendo que sofriam de "orfandade de cadastro". A orfandade acontece quando um registro em access-list é criado, o cliente deixa de existir, e o cadastro continua na RB, "sem pai nem mãe".

    A solução para esta situação é um script, que rodado periodicamente (crontab), alimenta uma base de dados. Depois de algumas semanas, a base de dados é processada, e de lá são extraídos os clientes ativos.

    Com isso, todos os registros de access-list são removidos, sendo reinseridos somente os registros validados, extraídos da base de dados consolidada.

    Para exportar seus clientes ativo, use o comando abaixo:
    Código :
    /interface wireless registration-table print without-paging
    Não necessariamente você precisa usar uma base de dados relacional. Pode usar um simples arquivo texto, e com uso de ferramentas de fatiamento em colunas (awk ou cut), ordenação (sort -f -b), filtragem (grep) e eliminação de duplicidade (uniq), terá o mesmo efeito.

    Você pode fazer seu sistema operacional interagir com RouterOS por meio do Paramiko[1]. Se quiser, pode usar MikroTik API[2].

    [1] https://under-linux.org/f143/modific...64/#post535237
    [2] http://wiki.mikrotik.com/wiki/Manual:API


    Saudações,

    Trober
    -
    -
    -
    -
    -

  3. #3

    Smile Re: Registrando Log

    Obrigado pela resposta trober, é exatamente esse o problema que temos aqui!

    Você poderia me explicar melhor como funcionaria esse script?

    Código :
    /interface wireless registration-table print  without-paging

    Com esse código eu consigo ver quem esta conectado no momento, mas sobre a base de dados, poderia me dar mais informações?(desculpe, tenha paciência, pois sou meio novato no ramo)


    Obrigado!
    Última edição por zoom18; 02-08-2011 às 11:48.

  4. #4

    Padrão Re: Registrando Log

    caro colega trober eu usava aqui pra ver quem esta onliner o comando interface wireless registration-table print qual a diferença do print pro print without-paging desde ja agradeço

  5. #5

    Padrão Re: Registrando Log

    Boa tarde [raswilson].
    Pelo que pude perceber aqui o "without-paging" serve para "não paginar", ele mostra tudo de uma vez, sem você precisar dar enter para descer a tela.
    Última edição por zoom18; 02-08-2011 às 12:34.

  6. #6

    Padrão Re: Registrando Log

    você estava com quantas pessoas registradas na hora qui você percebeu essa diferença ?

  7. #7

    Padrão Re: Registrando Log

    Fiz o teste em duas RB, uma tinha 8 clientes, a outra tinha 54.

  8. #8

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Obrigado pela resposta trober, é exatamente esse o problema que temos aqui!

    Você poderia me explicar melhor como funcionaria esse script?

    Código :
    /interface wireless registration-table print  without-paging

    Com esse código eu consigo ver quem esta conectado no momento, mas sobre a base de dados, poderia me dar mais informações?(desculpe, tenha paciência, pois sou meio novato no ramo)


    Obrigado!

    Boa tarde.

    1) Com um script na linguagem Python, você conecta na RB, enviando como parâmetro IP, login, senha e comando, conforme código abaixo:

    Código :
    def OpenSSH(Host, Login, Password, Command):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(Host, username=Login, password=Password)
        stdin, stdout, stderr = ssh.exec_command(Command)
     
        List = []
     
        for line in stdout:
            List.append(line.replace('\r', ''))         
     
        ssh.close()
     
        return List

    Com isso, você carregou na lista de nome List a saída do comando. Feito isso, você descarrega o conteúdo da lista em um arquivo, como no exemplo abaixo:

    Código :
    def FromListToFile(Filename, List):
        varFile = open(Filename, "w")
        varFile.writelines(List)
        varFile.close()

    Uma vez salvo o arquivo e disco, você pode fatiar colunas de texto, usando a própria linguagem Python, ou se quiser, pode usar recursos nativos do seu shell. O fatiamento em colunas pode ser feito com o awk ou cut; a ordenação, se usar FreeBSD, é como sort -f -b. Precisa ter um cuidado com o sort do GNU/Linux, que tem sintaxe diferente. As filtragem você fará com grep ou egrep; e eliminação de duplicidade, de linhas repetidas, com o uniq. O comando uniq, com parâmetro -d, mostrará só os registros repetidos.

    Enfim, imagino que isso iluminará bastante o processo.

    Se não dominar Python, programação e congêneres, gruda tudo dentro do Excel, que dá para fazer muita coisa lá dentro

    Espero ter ajudado.

    Saudações,

    Trober
    -
    -
    -
    -
    -

  9. #9

    Padrão Re: Registrando Log

    Obrigado trober! Vou estudar aqui e ver se consigo!

    Obrigado.

  10. #10

    Padrão Re: Registrando Log

    Ok.

    Mantenha-nos informado sobre seus progressos

    Saudações,

    Trober
    -
    -
    -
    -
    -

  11. #11

    Padrão Re: Registrando Log

    Trober, tem como adicionar algum parametro no comando que você me passou (do mikrotik) para trazer tambem o last-ip?


    Obrigado.

  12. #12

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Trober, tem como adicionar algum parametro no comando que você me passou (do mikrotik) para trazer tambem o last-ip?


    Obrigado.
    Boa tarde.

    Tem sim

    Crie um script (System / Script) com o seguinte código:


    Código :
    :local varID 0
    :foreach varRegistration in=[/interface wireless registration-table find] do {
       :put ($varID . "|" . [/interface wireless registration-table get $varRegistration interface] . "|" . [/interface wireless registration-table get $varRegistration mac-address] . "|" . [/interface wireless registration-table get $varRegistration last-ip] . "|" . [/interface wireless registration-table get $varRegistration comment])
       :set varID ($varID + 1)
    }

    Supondo que o nome que você atribui ao script é GETREG, para executá-lo, rode o comando abaixo:

    Código :
    /system script run GETREG

    Está pronto! Agora é fazer o Python, via Paramiko, chamar esse script

    Saudações,

    Trober
    -
    -
    -
    -
    -

  13. #13

    Padrão Re: Registrando Log

    Bom dia Trober!
    Consegui fazer o scrip e rodar via Python, chamando pelo Paramiko, so estou apanhando ainda na parte de salvar apenas os macs que não se repetirem a cada chamada!

  14. #14

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Bom dia Trober!
    Consegui fazer o scrip e rodar via Python, chamando pelo Paramiko, so estou apanhando ainda na parte de salvar apenas os macs que não se repetirem a cada chamada!
    Bom dia! Que bom que funcionou

    Em Python, você pode remover as duplicidades, com base em alguns exemplos[1]. Se quiser, também pode fazer contagens de itens repetidos, removendo os duplicados n-1 (se tem 10, remove 9; se tem 2, remove 1, etc.).

    Se for usar shell script, pode usar o uniq. Se passar o parâmetro -d, mostrará somente os registros duplicados.

    Se não for problema para o colega, publica o código no próximo post, para que assim possamos analisar e contribuir com sugestões.

    [1] http://code.activestate.com/recipes/...om-a-sequence/

    Saudações,

    Trober
    -
    -
    -
    -
    -

  15. #15

    Question Re: Registrando Log

    Bom, vamos lá!

    É isso ai que esta acontecendo:
    o nome do script no mikrotik é tla.

    Na parte de jogar na lista ocorre o erro.


    Código :
     root@SuporteOS:/home/jefferson/Área de Trabalho# pythonPython 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import paramiko
    /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases.  See http://www.pycrypto.org/randpool-broken
      RandomPool_DeprecationWarning)
    >>> ssh = paramiko.SSHClient()
    >>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    >>> ssh.connect('192.168.88.1', username='admin', password='tequila')
    >>> stdin, stdout, stderr = ssh.exec_command('/system script run tla')
    >>> List = []
    >>> for line in stdout:
    ... List.append(line.replace('\r',''))
      File "<stdin>", line 2
        List.append(line.replace('\r',''))
           ^
    IndentationError: expected an indented block
    >>>

  16. #16

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Bom, vamos lá!

    É
    Código :
     
           ^
    IndentationError: expected an indented block
    >>>
    Boa tarde.

    Os blocos delimitadores na linguagem Python são implícitos, se comparados aos blocos explícitos de outras linguagens.

    O que define a delimitação em Python é a indentação[1]. Veja no código de exemplo abaixo, que o condicionador IF não tem "{ ... }", a exemplo de C, C++ e Java.

    Código :
    a=1
    b=5
     
    if a<b:
        #comentario blah blah blah
        print "A menor que B"
    else:
        #comentario blah blah blah
        print "A nao eh menor que B"

    Como acima da linha que apresentou o erro, há um for, que também requer um bloco delimitador.

    Em C, o bloco delimitador para for é:

    Código :
    #include <stdio.h>
    main()
    {
        int i;
        for(i=0;i<10;i++){
            printf("Girando %d\n", i);
        }
    }

    Em Python, o bloco delimitador para for é:
    Código :
    for i in range(0,10):
        print "Girando", i

    Veja que não há bloco delimitador explícito. A indentação faz essa função. Logo, ordenando a indentação de seu código, esse problema será sanado

    [1] http://pt.wikibooks.org/wiki/Python/Conceitos_básicos/Indentação

    Saudações,

    Trober
    -
    -
    -
    -
    -

  17. #17

    Padrão Re: Registrando Log

    Entendi Trober!


    agora estou com outro problema: root@SuporteOS:/home/jefferson/Área de Trabalho# python script.py /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken
    RandomPool_DeprecationWarning)


    Muito obrigado por estar me ajudando!

  18. #18

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Entendi Trober!


    agora estou com outro problema: root@SuporteOS:/home/jefferson/Área de Trabalho# python script.py /usr/lib/python2.6/dist-packages/Crypto/Util/randpool.py:40: RandomPool_DeprecationWarning: This application uses RandomPool, which is BROKEN in older releases. See http://www.pycrypto.org/randpool-broken
    RandomPool_DeprecationWarning)

    Muito obrigado por estar me ajudando!
    Boa noite.

    Vejo que você está com Python 2.6. Faça a atualização do seu sistema operacional (que ao que parece é um GNU/Linux antigo ou desatualizado) e dos pacotes respectivos. Aqui tenho FreeBSD 8.2 e Python 2.7 (2.7.1_1), e não aparece essa mensagem.

    Depois das atualizações, é bem provável que essa mensagem de alerta desapareça

    Saudações,

    Trober
    -
    -
    -
    -
    -
    Última edição por trober; 05-08-2011 às 20:57. Razão: Correção gramatical

  19. #19

    Wink Re: Registrando Log

    Ok, estou com um debian (esta tudo atualizado, bonitinho!), sobre a versão do python é 2.6 sim!
    Bom, so segunda que vou testar novamente, vou ver se instalo a o 2.7 e ver se roda!

    Obrigado!

  20. #20

    Padrão Re: Registrando Log

    Citação Postado originalmente por zoom18 Ver Post
    Ok, estou com um debian (esta tudo atualizado, bonitinho!), sobre a versão do python é 2.6 sim!
    Bom, so segunda que vou testar novamente, vou ver se instalo a o 2.7 e ver se roda!

    Obrigado!
    Ok!

    Bom final de semana.

    Na segunda-feira continuamos a luta

    -
    -
    -
    -
    -