Supondo que você tenha acesso root à máquina Linux em algum lugar do caminho (terminal ou até mesmo um roteador intermediário), é possível escrever uma regra iptables que corresponda ao tráfego do aplicativo e direcione-a para uma cadeia específica que não faz nada além de aceita todos os pacotes. O kernel mantém um byte e um contador de pacotes em cada cadeia. Assumindo que os pacotes que você deseja contar vão de IP 10.1.2.3 Porta TCP 42123 para IP 10.7.8.9 Porta TCP 42789:
iptables -I FORWARD -p tcp -s 10.1.2.3 --sport 42123 -d 10.7.8.9 --dport 42789 -j ACCEPT
Substitua FORWARD
por OUTPUT
no host de origem por INPUT
no host de destino.
Você pode ler os contadores com iptables -nvxL FORWARD 42
, em que 42 é o número de regras (a primeira regra é o número 1).
Faça isso para cada direção, se quiser contar as duas direções. Leia os contadores em intervalos de tempo conhecidos para medir o uso da largura de banda.
Você pode ganhar um pouco de flexibilidade se criar uma cadeia intermediária.
iptables -N myapp_counter
iptables -A myapp_counter -j ACCEPT
iptables -I FORWARD -p tcp -s 10.1.2.3 --sport 42123 -d 10.7.8.9 --dport 42789 -j myapp_counter
iptables -I FORWARD -p tcp -s 10.7.8.9 --sport 42789 -d 10.1.2.3 --dport 42123 -j myapp_counter
Com essa configuração, o contador do myapp_counter
incluirá o tráfego nas duas direções. Outro benefício de passar por uma cadeia é que você pode ler atomicamente o contador na cadeia e defini-lo como 0 com iptables -nvxZL myapp_counter
. E você não precisa descobrir o número da regra, por isso é mais fácil automatizar a configuração.