Estatísticas de tráfego de rede
Publicado por Khayla Elias dos Santos (última atualização em 20/08/2015)
[ Hits: 8.168 ]
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
Troca automatica de papel de parade no fluxbox
Script para Criação de ips para utilizar em controle de banda
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel... (19)
material de assembly x64 [RESOLVIDO] (3)
Como configurar o Openvpn do pfSense para entregar da memsa faixa de I... (1)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba