Mostrando postagens com marcador ruby. Mostrar todas as postagens
Mostrando postagens com marcador ruby. 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, 17 de janeiro de 2008

Que caminho seguir? Java, C++, Python ou Ruby


Esta eterna questão me toma, não consigo chegar à decisão. Quanto a Java pretendo continuar estudando-a e é certo que logo em seguida, assim que chegar meu notebook, devo iniciar um projeto J2EE pra consumo próprio. Vou utilizar, certamente, o framework MVC do ilustríssimo Sérgio, o Mentawai, que já citei anteriormente nas postagens referente ao meu TCC. Quanto à persistência ainda não defini, bom, mas vou deixar estes detalhes pra mais tarde, quando realmente iniciar o projeto.
Sempre tive muita vontade de ser um programador C, tanto é que muitas e muitas vezes implementei pequenos programinhas em C, nada avançado, mas só para poder dizer que sabia programar em C. Estou achando muito interessante o KDE4, embora eu seja, atualmente, usuário Gnome, mas não posso deixar de admitir que sempre admirei o KDE e o QT (depois que a Trolltech passou a disponibilizá-lo, também, sob GPL). Se o tempo me permitir, tentarei iniciar alguns estudos, sem muita ambição, em C++ e quero utilizar o Kdevelop, o tutorial do Antonio Larrosa (http://developer.kde.org/~larrosa/tutorial.html) e este (http://www.beginning-kdevelop-programming.co.uk/) do Andrew Ward.
Por fim, ainda paira a indecisão sobre começar os estudos em Python ou em Ruby, a inclinação está, atualmente, para o lado do Ruby por causa do Rails.
Gostaria mesmo de saber que vantagens teria o Python sobre o Ruby, pois se, afinal, eu não encontrar nenhuma, acredito que definitivamente Python não será minha opção como linguagem de "altíssimo nível".