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.

8 comentários:

Roger Leite disse...

legal, gostei da iniciativa.
Acho que só faltou um mini passo-a-passo pra quem deseja testar o "pré-alfa-version" !

Quando puder, coloque um mini guia pros ubunteiros !

flw e sucesso!

Roger Leite

William Ferraz disse...

Concordo em parte com a explanação acima...
mas foda-se os ubunteiros... faz algo generico que você possa usar de maneira generica em qualquer distro.

Anônimo disse...

olá flávio,
qual é a licença?

você não fala dela na descrição e nem no código...

abraços,

Flávio Menezes dos Reis disse...

Galera... agora estou no trabalho, mas amanhã faço o passo-a-passo e é tão simples que necessita só do ruby 1.8 e libpcap-ruby1.8 (dependência no debian). Realmente metal, esqueci de informar, mas na próxima versão já incluo referência à licença GPL v2. Obrigado a todos

rockplace disse...

testei aqui.. funcionou mto bem !!

quado executo aparece isto:

/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/pcap.so: warning: do not use Fixnums as Symbols
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/pcap.so: warning: do not use Fixnums as Symbols
/usr/lib64/ruby/site_ruby/1.8/x86_64-linux/pcap.so: warning: do not use Fixnums as Symbols


.. algumas dicas para as proximas versoes:

- paginação
- ordenar os hosts (ip,bytes in, bytes out, pkt in, pkt out, total bytes in, total bytes out)


parabens !!

Anônimo disse...

O iptraf nao faz exatamente isso???

Andrew Max disse...

Olá!

Estou tentando instalar no Centos5 e não estou conseguindo. Estou usando o ruby 1.8 e ruby-pcap-0.6 que compilei. Não achei a libpcap-ruby1.8 pelo yum.

Esta dando o seguinte erro:

/usr/lib/ruby/site_ruby/1.8/i386-linux/pcap.so: warning: do not use Fixnums as Symbols
/usr/lib/ruby/site_ruby/1.8/i386-linux/pcap.so: warning: do not use Fixnums as Symbols
/usr/lib/ruby/site_ruby/1.8/i386-linux/pcap.so: warning: do not use Fixnums as Symbols
/usr/lib/ruby/site_ruby/1.8/pcaplet.rb:56: [BUG] Segmentation fault
ruby 1.8.5 (2006-08-25) [i386-linux]

Aborted


Agradeço se vc puder me ajudar.
Estou atraz de um programa que faça isso a algum tempo.

Forte abraço.

Anônimo disse...

Flávio, não querendo desanimar - eu também sempre gostei de fazer programinhas legais que resolvem o meu problema - mas isso que você fez se chama reinventar a roda.

Existe um programinha chamado MRTG ( http://oss.oetiker.ch/mrtg/ ) que faz exatamente isso, há mais de 10 anos.

Não ficou claro para mim se você tem uma máquina Linux que é o seu roteador, ou se você tem mesmo um equipamento roteador (wireless talvez) e você quer pegar a informação de tráfego de rede dele.

Em qualquer um dos casos, você deve conseguir obter essas informações através do protocolo SNMP, que serve exatamente para isso.