#!/bin/bash # # eduroam Script de arranque do serviço de rede eduroam # # chkconfig: 2345 11 89 # description: Este script foi criado pelo Centro de Cálculo (CCa) para # automatizar a tarefa de ligação de máquinas com Linux # à rede sem fios eduroam. # O script assume que o hardware é compatível com todos os # requisitos necessários para o seu funcionamento. Para mais # informações consulte as páginas de ajuda que o CCa # disponibiliza em: # http://www.fc.up.pt/wireless/ # #$Id: eduroam 515 2011-05-20 14:44:04Z ecoutinho $ # #### #### OBRIGATÓRIO: Definir as variáveis para esta máquina #### #### # # Definição do interface de rede que este script utiliza. # #INTERFACE=wlan0 INTERFACE=eth1 # # Definição do comando para chamar o supplicant. # SUPPLICANT="wpa_supplicant" SUPP_CONF=/etc/wpa_supplicant/wpa_supplicant.conf if [ ! -f $SUPP_CONF ]; then if [ -f /etc/wpa_supplicant.conf ]; then SUPP_CONF=/etc/wpa_supplicant.conf else echo "Erro: Nao foi possivel determinar a configuracao do $SUPPLICANT." exit 1 fi fi OPTIONS="-i $INTERFACE -c $SUPP_CONF -d -B -D wext" #### #### ALTERE O SCRIPT A PARTIR DESTE PONTO SE SOUBER O QUE ESTA A FAZER #### #### RETVAL=0 SSID="eduroam" # numero de segundos ate desistir MAX=30 if [ "$INTERFACE" == "" ]; then echo "Erro: O interface da rede sem fios não está definido. Edite este script e defina a variável 'INTERFACE'." exit 1 fi if [ "$SUPPLICANT" == "" ]; then echo "Erro: O supplicant não está definido. Edite este script e defina a variável 'SUPPLICANT'." exit 1 fi # verificar que o interface existe if ! iwconfig $INTERFACE 2>/dev/null | grep -q "Access Point" ; then echo "Erro: Não foi possível encontrar o interface da rede sem fios. Edite este script e defina a variável 'INTERFACE', ou confirme que o módulo está carregado." exit 1 fi success() { echo -n "[ OK ]" echo -ne "\r" return 0 } failure() { echo -n "[ FAILED ]" echo -ne "\r" return 0 } # source function library if [ -f /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions fi start() { # desligar o interface /sbin/ifconfig $INTERFACE down killall $SUPPLICANT >& /dev/null dhclient -r $INTERFACE >& /dev/null if [ -f /var/run/dhclient-$INTERFACE.pid ]; then kill -9 `cat /var/run/dhclient-$INTERFACE.pid` >& /dev/null fi # ligar o interface /sbin/ifconfig $INTERFACE up # configurar o interface wireless iwconfig $INTERFACE essid $SSID mode managed >& /dev/null iwconfig $INTERFACE key 0000-0000-00 >& /dev/null # iniciar o supplicant. echo -n "A iniciar serviço de autenticação na rede $SSID: " $SUPPLICANT $OPTIONS >& /dev/null && success || failure RETVAL=$? echo # fornecer alguma informacao sobre a autenticacao if [ "$RETVAL" = 0 ]; then echo -e -n "A procurar um Access Point " c=0 while :; do ap=`iwconfig $INTERFACE 2>/dev/null | grep "Access Point:" |sed 's/.*Access Point: \([^ ]\+\).*/\1/'` if [ "$ap" != "" -a "$ap" != "00:00:00:00:00:00" -a "$ap" != "Not-Associated" ]; then success echo -e "\n Associado ao Acess Point $ap" break fi if [ $c -eq $MAX ]; then failure echo -e "\nErro: Não foi encontrado nenhum Access Point.\nPor favor desloque-se para uma zona com melhor cobertura de sinal.\n" stop echo -e -n "Ligação à rede $SSID: " && failure echo exit 1 fi c=`expr $c + 1` echo -n "." sleep 1 done echo -e -n "A negociar a autenticação " c=0 while :; do key=`iwconfig $INTERFACE 2>/dev/null | grep "Encryption key:" |sed 's/.*Encryption key:\([^ ]\+\).*/\1/'` if [ "$key" != "off" -a "$key" != "0000-0000-00" -a "$key" != "0" ]; then success echo -e "\n O utilizador foi autenticado com sucesso." break fi if [ $c -eq $MAX ]; then failure cat <& /dev/null RETVAL=$? if [ "$RETVAL" = 0 ]; then c=0 while :; do ip=`ifconfig $INTERFACE |grep "inet addr:\|inet end.:" |sed 's/.*inet addr:[ ]*\([^ ]\+\).*/\1/' |sed 's/.*inet end.:[ ]*\([^ ]\+\).*/\1/'` if [ "$ip" != "" ]; then success echo -e "\n Obteve o endereço IP $ip" break fi if [ $c -eq $MAX ]; then failure echo -e "\nErro: Não foi possível obter um endereço IP.\nPor favor desloque-se para uma zona com melhor cobertura de sinal.\n" stop echo -e -n "Ligação à rede $SSID: " && failure echo exit 1 fi c=`expr $c + 1` echo -n "." sleep 1 done else failure echo fi fi echo -e -n "Ligação à rede $SSID: " [ "$RETVAL" = 0 ] && success || failure echo return $RETVAL } stop() { echo -n "A parar $SSID: " # parar o dhclient if [ -f /var/run/dhclient-${INTERFACE}.pid ]; then /usr/bin/kill -TERM `cat /var/run/dhclient-${INTERFACE}.pid` >& /dev/null else /sbin/dhclient -r $INTERFACE >& /dev/null fi # parar o suppllicant killall $SUPPLICANT >& /dev/null # parar o interface ifconfig $INTERFACE down >& /dev/null # desligar o AP iwconfig $INTERFACE essid any >&/dev/null iwconfig $INTERFACE ap any >&/dev/null && success || failure RETVAL=$? echo return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac exit $RETVAL