Como monitorar o tráfego total de rede transferido em uma determinada interface

2

Preciso monitorar a quantidade de tráfego que passou por uma determinada interface (dongle de banda larga móvel), para ser informado quando o total atingir (ou se aproximar) de uma determinada quantidade.

Eu tenho banda larga móvel praticamente gratuita até um limite não muito generoso e gostaria de iniciar um script toda vez que quiser usar o dongle e avisar quando estiver próximo do meu limite ou informar o total quando sair o script.

Tudo o que preciso de ajuda agora é usar o comando certo para registrar a transferência total em valores legíveis por humanos, ou seja, tão simples quanto "Você transferiu 12,8Mb desde o início do monitoramento". Eu não ligo para velocidade, utilização ou qualquer coisa, exceto o total acumulado.

Depois que eu tiver uma maneira de calcular a transferência total, posso executar com êxito alguns comandos do ipfw para firewall da interface e impedir transferências adicionais até que eu o diga.

Estou usando o Mac OS X 10.7, mas quero usar comandos de terminal padrão em um script bash (netstat, tcpdump, o que estiver pré-instalado) e não usar uma ferramenta baixada (mesmo que funcione perfeitamente - preciso disso em um script para Eu posso colocar minha própria lógica em torno disso, como eu quero).

abafar
fonte

Respostas:

1

Você pode usar o filtro de pacotes (PF) para isso, que faz parte do OSX. Primeiro, crie uma regra que rotule todo o tráfego na interface ( en1 neste exemplo - substitua pela sua interface real):

echo "pass on en1 label \"traffic-en1\"" | sudo pfctl -f-
sudo pfctl -E # enable PF

Agora o tráfego está sendo contado e você pode visualizar os contadores com sudo pfctl -sl:

traffic-en1 4701 69 13029 40 6292 29 6737

Sinta-se à vontade para convertê-los em uma formatação mais amigável para o ser humano:

sudo pfctl -sl | awk '$1="traffic-en1" { printf "KBytes total: %d (in: %d, out: %d)\n", $4/1024, $6/1024, $8/1024 }'

O que deve lhe dar algo parecido KBytes total: 192 (in: 95, out: 97).

Você pode redefinir o contador com sudo pfctl -z.

Nota: O OS X pode reclamar de "Não há suporte ao ALTQ no kernel, funções relacionadas ao ALTQ desativadas" ao chamar o pfctl - isso é perfeitamente normal e seguro de ignorar.

Nota 2: Não é recomendável jogar remotamente com as configurações de firewall, mas, na pior das hipóteses pfctl -d, desabilitará a coisa toda (se você se trancar de alguma forma).

Ingmar Hupp
fonte
Isso é ótimo, muito obrigado. O melhor que eu fiz foi extrair o campo de comprimento de cada pacote do tcpdump e tentar manualmente adicioná-los rapidamente. Isso significava que era difícil fazer a conta e agir de acordo. Seu método é superior em todos os aspectos. Eu presumo que capta todo o tráfego, independentemente do TCP / UDP, e registra tamanho do pacote real não MTU etc.
stuffe
11
Sim, a regra de exemplo corresponde a tudo, mas você também pode criar regras mais específicas. Conta os bytes reais enviados pela interface. O números de saída por pfctl -slapós o rótulo são especificamente: avaliações, os pacotes no total, total de bytes, os pacotes em, em bytes, os pacotes para fora, bytes fora
Ingmar Hupp