Identificando sinal de rede sem fio em modo texto

Publicado por Wesley Henrique Leite (última atualização em 13/02/2012)

[ Hits: 6.094 ]

Download wifiSinal.sh




Este script baseia-se no resultado gerado pelo comando "iwlist" imprimindo uma barra colorida de indicador de sinal, nada demais apenas por diversão, foi testado apenas no OpenSuse, mas não acredito ter problemas com outras distros.

Exemplo de Saída:

"DYNAMIC" __________      [ ▒▒▒▒▒▒▒▒ ]            WEP              
^CYMBOL" ___________      [ ▒▒▒▒▒▒▒▒ ]            ???????  


Implementei dois modos:

-p (Persistente)

Neste modo a tela do terminal será limpa, em seguida será carregada em tempo real a lista de redes sem fio próximas a você, não é estático, ficará atualizando o tempo todo o sinal, a ordem das redes pode mudar.

-c (Console)

Idêntico ao modo acima, mas não fica atualizando.

Modo de usar:

     ./wifiSinal.sh -[c|p] <wlanX>

  



Esconder código-fonte

#!/bin/sh

#
# autor: Wesley Henrique Leite
# : wesleyhenrique [-] gmail ['] com




function ChecarError {
        # ESSA FUNCAO EH INVOCADA SEMPRE QUE QUERO VERIFICAR SE 
        # ALGUM ERRO OCORREU NA EXECUCAO DO SCRIPT 
        # SE #? NAO FOR 0 ENTAO TEM ALGUM ERRO 
   if [ $? -ne 0 ]
   then
      echo "Ocorreu um erro"
        exit
    fi 
}




function ScanRetEssid {
       # PEGA SID DAS REDES
       # CHECA SE DEU ALGUM ERRO 
   $IW $LAN scan | egrep "ESSID" | cut -d: -f2 
    ChecarError
}


function RetSinal {
        # RECEBE COMO PARAMETRO O NOME DA REDE
        # VERIFICA O SINAL DESTA REDE E RETORNA UM NUMERO
        # DE 0 A 7 
        # EM SEGUIDA CHECA SE DEU ALGUM ERRO
   ESSID=$1 
   SINAL=$($IW $LAN scan | grep -B2 $ESSID | cut -d"=" -f2 | cut -d"/" -f1 | cut -d" " -f1 | sed 's/a-zA-Z//g' )
    echo ${SINAL:0:1}
    ChecarError
 
}


function IEEE {
        # RECEBE COMO PARAMETRO O NOME DA REDE E TENTA 
        # LOCALIZAR O PROTOCOLO UTILIZADO
    ESSID=$1
    W80211=$($IW $LAN scan | grep -A20 $ESSID | egrep -wo "(WPA|WPA2|WEP)" | cut -d: -f2-3 )


    if [ -z "$W80211" ]
    then
        echo "???????"
    else
        echo ${W80211:0:4}
    fi
 
}


function ImprimirBarra {
        # E FINALMENTE IMPRIME UMA BARRA INFORMANDO 
        # O SINAL DA REDE
    SINAL=$1
    if [ -z $SINAL ]  
    then
        SINAL=1
    fi
    for i in $(seq 1 7) 
    do


        if [ $i -le $SINAL ] 
        then
            echo -ne "{FONTE}33[;32;1m{FONTE}30{FONTE}33[m"
        fi
        if [ $i -ge $SINAL ]
        then
            echo -ne "{FONTE}33[;37;1m{FONTE}30{FONTE}33[m"
        fi


    done
    ChecarError
}


function run {
               # EH A FUNCAO QUE UTILIZO PARA RODAR O SCRIPT
   NOME=$(ScanRetEssid $LAN)


   for SID in $NOME 
   do
       NomeDaRede="$SID __________________"
       SIG="$(RetSinal $SID)"
       echo  -e "${NomeDaRede:0:20}      [ $(ImprimirBarra $SIG) ]            $(IEEE $NomeDaRede)              "
   done


   ChecarError
}




##
# MAIN
##
        # CHECA SE SEU ID PRINCIPAL EH DE ROOT 
        # NAO QUE NECESSARIAMENTE DEVA SER
        # EXISTEM MANEIRAS DE UTILIZA O IWLIST
        # COM USUARIO..
if [ $EUID -ne 0 ]
then
   echo "Necessita ser root" 
   exit
fi 


# LOCALIZA O EXECUTAVEL DO PROGRAMA PASSADO COMO PARAMETRO
IW=$(which iwlist)
LAN=$2
 if [ -z "$IW" ]
 then
                # SE A VARIAVEL QUE CONTEM O IWLIST ESTIVER VAZIA 
                # O IWLIST NAO FOI ENCONTRADO EM SEU SISTEMA
     echo "iwlist nao encontrado" 
  exit
 fi


        # BASICAMENTE O SCRIPT NECESSITA DE DOIS PARAMETROS
        # SE INFORMAR MENOS OU MAIS QUE DOIS PARAMETRO ELE NAO RODARAH
 if [ $# -ne 2 ]
 then
     printf "Modo de usar\n$0 -[p|c] wlanX\n" 
     exit
 fi


# CASE PARA CHECAR  OS PRIMEIROS PARAMETRO 
 case $1 in
    "-p")
        clear
        while [ 1 ]
        do
            tput cup 0 0
            run
        done
    ;;


    "-c")
        run
    ;;
 esac

Scripts recomendados

NFS

Agendamento para desligar ou reiniciar

Monitorar links e fazer redundância

Backup comprimido de banco de dados PostgreSQL

Abre e Fecha o CD/DVD ROM


  

Comentários
[1] Comentário enviado por wesleyh em 13/02/2012 - 23:35h

Fico grato pelos emails, notei que houve uma dificuldade para entender -[c|p] isso quer dizer -c ou -p fiz em modo de expressão regular. blz .. vlw pessoal.

Modo de Usar:

./wifiSinal.sh -c wlan0
ou
./wifiSinal.sh -p wlan0



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts