Estatísticas de tráfego de rede
Publicado por Khayla Elias dos Santos (última atualização em 20/08/2015)
[ Hits: 8.651 ]
Homepage: https://linktr.ee/khayla.elias
Download 1439318928.net-monitor (versão 2)
Exibe as estatísticas do tráfego de rede de uma determinada interface na tela do terminal.
Os dados utilizados são referentes a quantidade de bytes enviados (rx) e recebidos (tx). São exibidos os valores da velocidade atual, do último minuto, dos últimos cinco minutos e dos últimos quinze minutos. Além disso, o máximo dos últimos quinze minutos também é calculado e exibido.
Modo de usar: vide comentários incluídos no topo do código.
Versão 2 - Enviado por Khayla Elias dos Santos em 11/08/2015
Changelog: Versão 2015-08-11 do Monitor de Tráfego de Rede para terminal em modo texto.
Principais alterações:
- Autorreajuste do "delay" considerando o tempo de execução;
- Maior aproximação dos valores do tráfego de dados;
- Melhoria na estrutura e clareza do código.
Download 1439318928.net-monitor
#!/bin/bash
# DESCRIÇÃO:
#
# Monitor de rede para terminal. Exibe as estatísticas do tráfego de rede de uma
# determinada interface. Os dados utilizados são referentes a quantidade de bytes
# enviados(rx) e recebidos(tx). Sã exibidas os valores da velocidade atual, do último
# minuto, dos últimos cinco minutos e dos últimos quinze minutos. Além disso, são
# exibidos também os máximos dos últimos quinze minutos.
#
# Parâmetro de entrada: interface de rede (eth0, wlan0, ppp0, ...)
#
# Nota: largura mínima do terminal recomendada para boa visualização: 80 colunas
#
# MODO DE USO:
#
# net-monitor [ interface ]
#
# Exemplo de uso:
#
# net-monitor eth0
#
# DESENVOLVIDO POR: Alexandre Elias dos Santos (aleniac@ufmg.br)
# DATA: Fevereiro de 2015.
dev=$1; dev=${dev:=ppp0} # interface de rede
units=128 # unidades: 1 byte = 1 Kbit/128 = 1 KB/1024
label="Kb/s" # rótulo para unidade
clear; tput civis # oculta o cursor
printf "Netmonitor - Monitor de Rede\n"
printf "Por Alexandre Elias dos Santos (aleniac@ufmg.br)"
sleep 3
tx1=0; rx1=0; cont1=0; cont5=0; cont15=0
TX=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
RX=(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
TX5=(0 0 0 0 0); RX5=( 0 0 0 0 0)
TX15=(0 0 0 0 0); RX15=( 0 0 0 0 0)
MTXtx=(0 0 0 0 0); MTXrx=( 0 0 0 0 0)
#charUp="\U25B2"; charDown="\U25BC"
function restaura(){
tput clear
cols0=$(tput cols)
printf "Largura do terminal: $cols0\nDispositivo: $dev"
sleep 2
[ $cols0 -lt 80 ] && (printf "\n\033[31mNúmero de colunas insuficiente!\e[m"; sleep 2; clear)
tput cup 0 0; printf '\e[1;7m%-7s\e[m' "iface"
tput cup 1 0; printf '\e[1;7m%-7s\e[m' "[$dev]"
tput cup 0 7; printf "\e[1;7;44;34m%$((`tput cols`-7))s" "$label"
tput cup 0 63; printf "≤\e[m"
tput cup 1 7; printf "\e[1;7;45;35m%$((`tput cols`-7))s" "$label"
tput cup 1 63; printf "≤\e[m"
tput cup 0 13; printf '\e[1;30;44m%-3s\e[m' " "
tput cup 1 13; printf '\e[1;30;45m%-3s\e[m' " "
tput cup 0 8; printf '\e[1;44m%-2s\e[m' " TX "
tput cup 1 8; printf '\e[1;45m%-2s\e[m' " RX "
tput cup 0 17; printf '%-9s' " Average"
tput cup 1 17; printf '%-9s' " now"
tput cup 0 29; printf '%-9s' " Last"
tput cup 1 29; printf '%-9s' " minute"
tput cup 0 41; printf '%-9s' " Last 5"
tput cup 1 41; printf '%-9s' " minutes"
tput cup 0 53; printf '%-9s' " Last 15"
tput cup 1 53; printf '%-9s' " minutes"
tput cup 0 65; printf '\e[31m%-9s' " Max"
tput cup 1 65; printf '%-9s\e[m' " last 15"
ip route| grep -q $dev || waiting
rx="`ip -s link show dev $dev|head -4|tail -1|sed 's/ */;/g'|cut -d";" -f2`" # bytes recebidos
tx="`ip -s link show dev $dev|tail -1|sed 's/ */;/g'|cut -d";" -f2`" # bytes enviados
} # restaura - restaura layout
function waiting(){
local flag=0
tput clear
printf "Searching network interface $dev..."
while [ "$flag" = "0" ]; do
sleep 3
(ip route|grep -q $dev) && flag="1"
done # seleciona interface
} # waiting - aguarda por um interface conectada
function reinicia(){
ip route|grep $dev || waiting
restaura
} # - reinicia
reinicia; sleep 1
while true
do
rx1="`ip -s link show dev $dev|head -4|tail -1|sed 's/ */;/g'|cut -d";" -f2`" # recebidos
tx1="`ip -s link show dev $dev|tail -1|sed 's/ */;/g'|cut -d";" -f2`" # enviados
let deltatx=$tx1-${tx:=0}; let deltarx=$rx1-${rx:=0}
# ============= N E T W O R K L E D =================================
if [ "${deltatx:=0}" -eq 0 ]; then
test `tput cols` -ne $cols0 && restaura
tput cup 0 14; printf '\e[1;30;44m%-1s\e[m' "▲"
else
tput cup 0 14; printf '\e[1;31;44m%-1s\e[m' "▲"
fi # LED TX
if [ "${deltarx:=0}" -eq 0 ]; then
ip route| grep -q $dev || reinicia # verifica dispositivo conectado
tput cup 1 14; printf '\e[1;30;45m%-1s\e[m' "▼"
else
tput cup 1 14; printf '\e[1;32;45m%-1s\e[m' "▼"
fi # LED RX
#=== C O N V E R Ç Ã O D E U N I D A D E S =======================
deltatx=`echo "scale=2; $deltatx/$units"|bc` # tx/s
deltarx=`echo "scale=2; $deltarx/$units"|bc` # rx/s
# ==================== E S T A T I S T I C A S =======================
tput cup 0 17
if [ "${#deltatx}" -gt 9 ];then
printf '%9.f' "${deltatx/./,}"
else printf '%9.1f' "${deltatx/./,}"
fi # MEDIA ATUAL TX
tput cup 1 17
if [ "${#deltarx}" -gt 9 ];then
printf '%9.f' "${deltarx/./,}"
else printf '%9.1f' "${deltarx/./,}"
fi #MEDIA ATUAL RX
# ATUALIZA MAXIMOS DE TX e RX
[ "`echo "scale=0; $deltatx*100/1"|bc`" -gt "`echo "scale=0; ${MTXtx[4]}*100/1"|bc`" ] && MTXtx[4]=$deltatx
[ "`echo "scale=0; $deltarx*100/1"|bc`" -gt "`echo "scale=0; ${MTXrx[4]}*100/1"|bc`" ] && MTXrx[4]=$deltarx
if [ "$cont1" -eq 4 ]; then
# MÉDIA DO ÚLTIMO MINUTO
soma_tx=0; soma_rx=0
for i in `seq 0 13`
do
TX[$i]=${TX[$(($i+1))]}
RX[$i]=${RX[$(($i+1))]}
soma_tx="`echo "scale=2; $soma_tx+${TX[$i]}"|bc`"
soma_rx="`echo "scale=2; $soma_rx+${RX[$i]}"|bc`"
done
TX[14]=$deltatx
RX[14]=$deltarx
soma_tx="`echo "scale=2; $soma_tx+$deltatx"|bc`"
soma_rx="`echo "scale=2; $soma_rx+$deltarx"|bc`"
mi_t="`echo "scale=2; $soma_tx/15"|bc`"
mi_r="`echo "scale=2; $soma_rx/15"|bc`"
tput cup 0 29
if [ "${#mi_t}" -gt 9 ]; then
printf '%9.f' "${mi_t/./,}"
else printf '%9.1f' "${mi_t/./,}"
fi # ÚLTIMO MINUTO RX
tput cup 1 29 # printf '%9.1f' "${mi_r/./,}" # ÚLTIMO MINUTO
if [ "${#mi_r}" -gt 9 ]; then
printf '%9.f' "${mi_r/./,}"
else printf '%9.1f' "${mi_r/./,}"
fi # ÚLTIMO MINUTO TX
cont1=0; let cont5=$cont5+4
if [ "$cont5" -eq 60 ]; then
# MÉDIA DOS ÚLTIMOS 5 MINUTOS
mi_t5=0; mi_r5=0
for i in `seq 0 3`
do
TX5[$i]=${TX5[$(($i+1))]}
RX5[$i]=${RX5[$(($i+1))]}
mi_t5="`echo "scale=2; print ($mi_t5 + ${TX5[$i]})"|bc`"
mi_r5="`echo "scale=2; print ($mi_r5 + ${RX5[$i]})"|bc`"
done # somatorio de mi_t5
TX5[4]=$mi_t; RX5[4]=$mi_r
mi_t5="`echo "scale=2; ($mi_t5 + $mi_t)/5"|bc`" # 640 = 128 * 5
mi_r5="`echo "scale=2; ($mi_r5 + $mi_r)/5"|bc`"
tput cup 0 41
if [ "${#mi_t5}" -gt 9 ];then
printf '%9.f' "${mi_t5/./,}"
else printf '%9.1f' "${mi_t5/./,}"
fi # ÚLTIMOS CINCO MINUTOS TX
tput cup 1 41
if [ "${#mi_r5}" -gt 9 ];then
printf '%9.f' "${mi_r5/./,}"
else printf '%9.1f' "${mi_r5/./,}"
fi # ÚLTIMOS CINCO MINUTOS RX
cont5=0; let cont15=$cont15+60
if [ "$cont15" -eq 180 ]; then
# MÉDIA DOS ÚLTIMOS 15 MINUTOS
mi_t15=0; mi_r15=0;maior_tx=0.00; maior_rx=0.00
for i in `seq 0 3`
do
TX15[$i]=${TX15[$(($i+1))]}
RX15[$i]=${RX15[$(($i+1))]}
mi_t15="`echo "scale=2; print ($mi_t15 + ${TX15[$i]})"|bc`"
mi_r15="`echo "scale=2; print ($mi_r15 + ${RX15[$i]})"|bc`"
[ "`echo "scale=0; ${MTXtx[$i]}*100/1"|bc`" -gt "`echo "scale=0; $maior_tx*100/1"|bc`" ] && maior_tx=${MTXtx[$i]}
[ "`echo "scale=0; ${MTXrx[$i]}*100/1"|bc`" -gt "`echo "scale=0; $maior_rx*100/1"|bc`" ] && maior_rx=${MTXrx[$i]}
MTXtx[$i]=${MTXtx[$(($i+1))]}
MTXrx[$i]=${MTXrx[$(($i+1))]}
done # somatorio de mi_t15
TX15[4]=$mi_t5; RX15[4]=$mi_r5
[ "`echo "scale=0; ${MTXtx[4]}*100/1"|bc`" -gt "`echo "scale=0; $maior_tx*100/1"|bc`" ] && maior_tx=${MTXtx[4]}
[ "`echo "scale=0; ${MTXrx[4]}*100/1"|bc`" -gt "`echo "scale=0; $maior_rx*100/1"|bc`" ] && maior_rx=${MTXrx[4]}
MTXtx[4]=0; MTXrx[4]=0
mi_t15="`echo "scale=2; ($mi_t15 + $mi_t5)/5"|bc`" # 640 = 128 * 5
mi_r15="`echo "scale=2; ($mi_r15 + $mi_r5)/5"|bc`"
tput cup 0 53
if [ "${#mi_t15}" -gt 9 ]; then
printf '%9.f' "${mi_t15/./,}"
else printf '%9.1f' "${mi_t15/./,}"
fi # ULTIMOS 15 TX
tput cup 1 53
if [ "${#mi_r15}" -gt 9 ]; then
printf '%9.f' "${mi_r15/./,}"
else printf '%9.1f' "${mi_r15/./,}"
fi # ULTIMOS 15 RX
tput cup 0 65
if [ "${#maior_tx}" -gt 9 ]; then
printf '\e[31m%9.f' "${maior_tx/./,}"
else printf '\e[31m%9.1f' "${maior_tx/./,}"
fi # MAXIMO EM 15 MIN. TX
tput cup 1 65
if [ "${#maior_rx}" -gt 9 ]; then
printf '\e[31m%9.f' "${maior_rx/./,}"
else printf '\e[31m%9.1f' "${maior_rx/./,}"
fi # MAXIMO EM 15 MIN. RX
cont15=0
fi # Média dos últimos 15 minutos
fi # Média dos últimos 5 minutos
fi # Média do último minuto
tx=$tx1; rx=$rx1; let cont1++
sleep .95 # intervalo de 1 segundo com desconto de 5% para processamento. Pode ser reajustado.
done # loop
Agenda de telefone em Shell usando Dialog
Desligamento da máquina caso o servidor venha a sair do ar.
Algoritmo Fisher-Yates shuffle
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)









