Mostrando postagens com marcador bandwidth monitor. Mostrar todas as postagens
Mostrando postagens com marcador bandwidth monitor. Mostrar todas as postagens

quinta-feira, 31 de janeiro de 2008

Tutorial para utilização do Ruby Bandwidth Monitor

Como várias pessoas estava solicitando auxílio para utilização do Ruby Bandwidth Monitor (RBM) e também eu estava fazendo várias alterações nele, agora que está em um estágio um pouco mais usável e com alguns recursos, vou descrever o método de instalação do Ruby e Libpcap-Ruby e onde alterar o código-fonte do rbm.rb para informar os parâmetros (que ainda não consigo enviar por linha de comando).

Tenho utilizado o RBM, constantemente, em sistemas Debian, tanto Etch (stable) como Lenny (testing), com Ruby1.8 e Libpcap-Ruby1.8, para instalá-los faça o seguinte, como root:
#apt-get install ruby1.8 libpcap-ruby1.8

Antes de iniciar, o RBM é utilizado em computadores que servem como roteadores de uma rede, fazendo NAT da rede interna para acesso a uma rede externa como a internet. Em todas as minhas configurações, sempre tenho a eth0 como dispositivo conectado à internet e eth1 para a rede interna.

Feito isto o sistema já estará pronto para rodar o RBM, para baixar o código-fonte, vá em http://www.katyphotoart.com/ruby/rbm.rb e para visualizar o codigo-fonte com a sintaxe colorida vá em http://www.katyphotoart.com/ruby/rbm.rb.html, portanto wget nele:

$wget http://www.katyphotoart.com/ruby/ruby.rb

Edite o arquivo e altere as variáveis globais que estão definidas a partir da linha 24 até a linha 29, onde explico a função de cada uma:
* $gateway_ip: o número de ip atribuído à interface que comunica-se com a rede interna, ou seja, o ip do gateway dos clientes.
* $device: dispositivo (eth0, eth1, etc) que comunica-se com a rede interna. Em uma próxima versão vai ser necessário informar só o dispositivo que o RBM será capaz de obter o $gateway_ip
* $sort_by: como explicado no código-fonte, indica por qual dos campos será classificado o resultado, ip (ou nome de máquina), traffic_in ou traffic_ou (para tráfegos de download ou upload), packets_in ou packets_out (para número de pacotes de download ou upload). Colocando um "-" (hífen) antes do parâmetro, a ordem de classificação será descendente, exemplo, "-ip".
* $refresh: o tempo em segundos para acúmulo e exibição dos resultados.
* $pcapoptions: para adicionar argumentos extras à biblioteca libpcap (responsável pela captura de pacotes), no estilo tcpdump. Digamos que eu queira obter somente o tráfego do cliente com ip 192.168.1.20, $pcapoptions terá como valor "host 192.168.1.20". Surigo a leitura do manpage do tcpdump para maiores detalhes.
* $nameshow: permite mostrar nome de máquina (obtida através do arquivo /etc/hosts) em detrimento ao número ip. Para tanto, defina o valor desta variável como "hostname", qualquer outro valor significa que deve ser exibido o número ip. (Em uma versão futura pretendo utilizar chamadas ao dns para conversão de nomes se isto mostrar-se realmente útil)

Feitas as alterações no código-fonte, basta rodar o programa, como root (pois é necessário para que a interface seja posta em modo promíscuo pela biblioteca libpcap):
#ruby1.8 rbm.rb

Para cancelar a execução do programa tecle a combinação CTRL+C.

Logo em seguida vou seguir a sugestão do keynes (eu acho) e permitir a exibição de "10.0.0.30" (exemplo), ao invés de "010.000.000.030" como acontece agora.

Era isto pessoal, qualquer dúvida é só perguntar

quarta-feira, 30 de janeiro de 2008

Ruby Bandwidth Monitor versão 0.02

Boa tarde gente!
Corrigi a atribuição do endereço mac para os clientes que estava errado, acrescentei a possibilidade de fazer resolução de nomes com base no arquivo /etc/hosts, para isto basta que se edite o código fonte e seja alterado o valor da variável global @nameshow para "hostname".

Era isto por enquanto. Como de costume o código está em http://www.katyphotoart.com/ruby/rbm.rb.html

Abraços

terça-feira, 29 de janeiro de 2008

Argumentos em linha de comand e pcaplet (para captura de pacotes)

Estou voltando ao problema relatado anteriormente com o intuito de alguma alma me ajudar nesta questão. Perdi mais de uma hora eu acho para descobrir, a duras penas, que não posso fazer captura de pacotes com o pcaplet quando envio argumentos por linha de comando. Explicando melhor, considerem o código abaixo em um arquivo de nome cap.rb:

01 #!/usr/bin/env ruby
02 require 'pcaplet'
03 cap = Pcaplet.new("-i eth0 -s 128")
04 filter = Pcap::Filter.new('ip', cap.capture)
05 cap.add_filter(filter)
06 cap.close

Se simpleste eu rodá-lo com "ruby1.8 cap.rb" beleza, não é gerado nenhum erro, mas se eu rodo-o assim "ruby1.8 cap.rb argumento", simplesmente o programa para a execução na linha 03 e retorna a mensagem de erro "setfilter: syntax error".

Estava precisando enviar parâmetros por linha de comando para facilitar a vida de quem precisa enviar parâmetros à uma aplicação.

Assim que eu conseguir algum progresso neste sentido posto aqui, senão fico aguardando a sugestão de quem quiser me ajudar.

Atualização do utilitário para controle de banda e novo nome

Buenas gente, tive um tempo vago hoje e fiz algumas atualizações no utilitário pra controle de banda, seguindo algumas sugestões que me passaram por comentário. A primeira atualização acho que foi quanto ao nome, agora passa a se chamar Ruby Bandwidth Monitor (RBM) e as demais:
* Paginação dos resultados
* Classificação em ordem ascendente e descendente por todos os campos
* Parâmetros informados no início do arquivo rbm.rc (notas a seguir)
* Somatórios

Não consegui de maneira alguma passar argumentos através da linha de comando e processar com ARGV sem receber a mensagem de erro "setfilter: parse error" na linha "cap = Pcaplet.new("-i #{$device} -s 128")" e este erro só ocorre porque tento passar argumentos pela linha de comando, então, por enquanto, tive que manter os parâmetros no código-fonte mesmo e são eles:
* $device: nome do dispositivo de rede a ser monitorado. Ex: eth0, eth1
* $gateway_ip: número ip da interface que será monitorada, em uma próxima versão vou tentar obter este número automaticamente, através do dispositivo informado
* $sort_by: pode ser ip,mac,traffic_in,traffic_out,packets_in e packets_out para classificação em ordem ascendente e com o ascréscimento de um "-" (hífen) logo antes (ex: "-ip") para classificação em ordem descendente
* $refresh: tempo em segundos para atualização dos resultados

Basicamente utilizo, Debian i486, Ruby 1.8, libpcap-ruby1.8 e tenho instalado em meu sistema a biblioteca libpcap0.8.

Quanto à biblioteca libpcap-ruby para CentoOS fico devendo por enquanto, mas vou procurar algum sistema RedHat pra testar.

Quanto ao iptraf, tenho usado ele seguidamente, o único problema é que ele não totaliza o tráfego por ip e quanto ao MRTG, realmente seria a solução ideal, mas eu quis iniciar este projeto com dois propósito, aprender um pouco de Ruby e ter um utilitário simples, que não demandasse muitas configurações e fosse bem direto ao assunto. Realmente não saberia como fazer para o MRTG me oferecer as mesmas informações que propus com o RBC, assim, tão simples e rápido.

Obrigado a todos pelos comentários, sugestões e críticas, o próximo passo acredito que seja fazer resolução de nomes para quem desejar assim (e eu desejo :-)).

Código-fonte em: http://www.katyphotoart.com/ruby/rbm.rb.html

Até logo

[]'s

domingo, 27 de janeiro de 2008

Ruby: Utilitário para verificação de controle de banda

Várias vezes procurei por algum utilitário que me auxiliasse na verificação do controle de banda do meu roteador. Precisava de algo que mostrasse o consumo de banda tanto de entrada quanto de saída de cada cliente (download e upload). Como utilizo o htb-tools este tem o htb ethX stats que, para mim, era quase perfeito, a não ser por não mostrar a taxa de transferência de saída.
Como estou interessado no aprendizado de Ruby, decidi aventurar-me em criar um utilitário com as características que precisava.
Outrora pesquisei como utilizar a biblioteca pcap com Java, mas desanimei-me logo em seguida nem lembro porque e descontinuei o projeto que nem havia iniciado. A uns dois dias atrás, deparei-me com um artigo da Linux Magazine que mostrava a utilização da biblioteca Pcap através do Perl para fazer uma espécie de log de utilização de banda por cliente e resolvi procurar se não havia a disponibilização de algum bind de pcap para Ruby. Gratamente fui surpreso que existia e meti a mão na massa.
Estou apanhando um monte, pois se nem sei direito como programar em Ruby, nunca antes havia brincado com pcap, a não ser algumas poucas vezes, indiretamente com tcpdump.
Gostaria só de compartilhar com quem esteja interessado, esta minha primeira versão "pré-alfabeto" e tentarei melhorá-lo com o tempo, pois ainda tenho que alterar o fonte para mudar alguns parâmetros e tenho utilizado algumas técnicas que devem causar calafrios na maioria dos bons programadores.
Ainda não pude colocar o htb-gen em ação, mas este utilitário vai ser muito interessante para monitorar as taxas de transferências dos meus clientes.
Apelidei-o de Ruby Bandwidth Control
Abraços a todos.

quinta-feira, 24 de janeiro de 2008

Controle de banda para provedor wireless com pouco link para upload

Olha que suamos a camiseta e mesmo assim eu ainda não estou com plena confiança de que está bom. Como sugeria professor de Teoria Geral de Administração, a Administração trata da forma como se gerencia/controla recursos finitos, pois para recursos infinitos não precisamos de gerenciamento/controle.
Pois bem, para download temos bastante banda, não quer dizer que não precisemos de Administração para ela, mas não estamos em um estado tão crítico, mas para upload a coisa está um tanto mais complicada.
Tenho usado htb para Administração de banda desde o princípio (mas a história de como iniciamos o projeto do provedor vai ficar para outros posts), auxiliado pelo htb-tools. Conseguir afinar o arquivo de configuração do htb-tools que será a base para a geração das regras "tc" não parecia tão complicado a princípio, pois claro até então os recursos eram como se fossem quase infinitos, mas agora temos uma grande carteira de clientes e meu upload está me dando trabalho. Se fosse simplesmente atribuir 24kbps para cada cliente e que o htb se virasse com o resto seria o ideal, mas como o htb vai saber qual a melhor de atribuir burst? Como EU vou saber o que isto, burst, significa e como funciona?
A resposta é que não sei e ainda vou continuar pesquisando a este respeito para poder afinar ainda mais minhas configurações e conseguir realmente oferecer serviços de ótima qualidade.
Só escrevi isto tudo aqui porque vai que aparece alguma alma caridosa que já tenha passado por isto e tenha como auxiliar-me nesta demanda. Encontrei o projeto htb-gen e pretendo experimentá-lo a semana que vem.
Abraços a todos.