Estatísticas de tráfego de rede
Publicado por Khayla Elias dos Santos (última atualização em 20/08/2015)
[ Hits: 8.363 ]
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
Configurar a rede no Debian, Kurumim e Ubuntu
conecta o pebrot , monocromatico em estatus offline
Estatística dos MB's consumidos pela internet
Gerador de senhas personalizadas
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)