Estatísticas de tráfego de rede
Publicado por Khayla Elias dos Santos (última atualização em 20/08/2015)
[ Hits: 8.348 ]
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
Incluindo lista de IP's nos arquivos de bloqueio do Squid automaticamente
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta