Bandwidth em C/C++

1. Bandwidth em C/C++

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 19/10/2010 - 17:16h

Ola!

Alguem saberia me dizer como faço para pegar o bandwidth da minha rede em C/C++ Linux?

Para pegar o Rx e Tx estou lendo o arquivo /proc/net/dev, mas não encontro nada a respeito da largura de banda.

Obrigado pela atenção!


  


2. Re: Bandwidth em C/C++

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 20/10/2010 - 08:43h

Bem, procurando na net, achei um post muito útil para tentar te responder sobre o assunto:

Link: http://www.linuxquestions.org/questions/linux-software-2/how-to-calculate-bandwidth-on-linux-344585/


///////////////////////////////////////////////
OK check this out.

Everything in linux is logged, though usually we have no idea where. I'm sure somewhere in /proc/net there is a way to tell how many bits have gone in and out. But here's how I do it.

I assume here that you have snmpd installed and running, as well as net-snmp-tools. Type "ps -A|grep snmp" and "snmpwalk --help" to test this.

Start by typing this:

snmpwalk -v1 -cpublic <host> system

This should start spewing system info down your console. Each value is in the form:

sytem.thing1.thing2.thing3.etc = <whatever>

Look for something that looks like ifInOctets and ifOutOctets. Those are how many bytes have been passed in and out by the interface since last reboot (or last counter reset, but we don't need to get into that here.) Look at the path (ie the system.thing1.thing2 etc) for those values: I can't remember them offhand. Then, when you type:

snmpwalk -v1 -cpublic <host> system.path.to.those.values |grep Octets

You should see those two values.

NOW: if you want to know bandwidth at a particular interval, you obviously must take two snapshots of those values and divide the difference by the time between them: I'm not going to write how to script this here, but I've done it, it's not too hard.

OR: If you want to do this the easy way, there's a great tool called "IPTraf". You can install it by rpm or however you wish. Just become root, and type iptraf. It's got a pretty nice interface that tells you all about bandwidth stats and such.

Have fun.
////////////////////////////////////////


Tradução:

Ok. Tente isto.

TTudo em Linux é registrado. Embora normalmente não sabemos onde. Com certeza em algum lugar do arquivo /proc/net há uma maneira de se saber quantos bits entraram e sairam. Mas aqui está como faço isto:

Eu presumo aqui que você tenha o snmpd instalado e rodando, assim como as ferramento net-snmp. Digite "ps -A|grep snmp" e "snmpwalk --help" para testar.

Comece digitanto isto:

snmpwalk -v1 -cpublic <host> system

Isso deve iniciar uma torrente de informações do sistema na tela. Cada valor está na forma:

sistema.algumacoisa1.algumacoisa2.algumacoisa3.etc = <qualquercoisa>

Procure algo que pareça com ifInOctets e ifOutOctets. Este são quantos byte entraram e sairam pela interface desde o último reinício da interface. Procure o caminho (exemplo sistema.algumacoisa1.algumacoisa2 etc) destes valores. Eu não os lembro agora. Então, quando você digita

snmpwalk -v1 -cpublic <host> sistema.caminho.para.estes.valores |grep Octets

você deve ver estes dois valores.

Agora:Se você quer saber a largura de banda (nt: bandwidth) num dado intervalo, obviamente, você deve adquirir estes dois valores (nt: em tempos diferente) e dividir pela diferença de tempo entre eles: não vou escrever o script aqui, mas já o escrevi e não é muito difícil.

Ou: se você quer fazer isto de uma maneira fácil, existem uma grande ferramenta chamada de "IPTraf". Você pode instalá-la por rpm ou qualquer que queira. Como root, apenas digite iptraf. É uma interface razoável que te diz tudo sobre status de largura de banda (nt: bandwidth) e tudo o mais.

Curta.


Embraces!




3. Re: Bandwidth em C/C++

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 20/10/2010 - 12:58h

Olá!

Obrigado pela resposta, mas precisava de uma solução apenas utilizando programas/arquivos padrões de todas as instalações Linux, visto que preciso realizar essa análise em várias distros e não seria viável colocar uma dependência no programa.

Vou continuar pesquisando e, se encontrar algo, posto aqui.

Obrigado!

PS: Muito obrigado por traduzir o link, mas não perca seu tempo fazendo isso. Sei ler em inglês.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts