Script shell : gestionnaire wifi

Fermé
philpep-tlse Messages postés 1 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008 - 24 janv. 2008 à 04:19
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 24 mars 2011 à 14:23
Bonjour,

J'ai écris un petit script shell (mon premier de plus de 10 lignes). Habitué de la console je voulais me lancer dans la progamation de scripts shell. Puis devant l'offre en matière de gestionnaire wifi je me suis dit que j'aillais voir si je pouvais faire quelque chose en console...

- Network manager de Gnome plante avec certaines cartes wifi, notament celles en usb.
- wicd est très sympa mais en gtk et il nécessite python + quelques libs
- Kwifi de KDE est un peu comme celui de Gnome

Puis j'aime bien les applis consoles legères... (je suis sous fvwm donc j'essaie d'éviter toutes les applis un peu trop gtk/qt)

Fonctionalitées :
-Détection de l'interface wifi
-Detection des reseau et s'il y a besoin de clef wep
-La connexion au reseau de son choix

Bref voilà le script :

#!/bin/bash
echo "############## Script wifi ##############"
echo "##                                     ##"
echo "##Bug report NOSPAM    ##"
echo "##                                     ##"
echo "## Ce script doit être lancé avec les  ##"
echo "## droits root. Si vous avez configuré ##"
echo "## sudo vous pouver le lancer avec     ##"
echo "## sudo ./wifish.sh ou sudo sh wifis.sh##"
echo "## Sinon vous passez en root avec la   ##"
echo "## commande habituelle : su -          ##"
echo "#########################################"


## Detection de l'interface wifi (Eth)
echo -e "\nDetection de l'interface wifi"
Eth=`iwconfig 2>/dev/null| cut -d' ' -f1`
sleep 1
echo -e "\nOK, votre interface est $Eth"

## Detection des essid et des clef qui vont avec dans le fichier essid.lst
echo -e "\nDetection des reseau wifi :"
echo -e "\nn    ESSID           KEY"
iwlist $Eth scan 2>/dev/null | cut -c21- | grep -v "^[MBQFIPA ]" | grep -v "^Ex" | cut -d':' -f2 | cut -d'"' -f2 > essid.tmp
MaxLst=`wc -l < essid.tmp`
MaxLst=$(($MaxLst-2))
Hidden=0
echo -e "<essid>:<key>" > essid.lst
i=2
j=1
while [ "$i" -le "$MaxLst" ]
do
    Ssid=`sed -n $i'p' essid.tmp`
    Encrypt=`sed -n $(($i+1))'p' essid.tmp`
    if [ "$Ssid" = "<hidden>" ]; then
        {
            Hidden=$(($Hidden+1))
        }
    else
        {
            echo "$Ssid:$Encrypt" >> essid.lst
            echo -e "\n$j   $Ssid           $Encrypt"
            j=$(($j+1))
        }
    fi
    i=$(($i+2))
done

## Choix du reseau, avec Essid=essid et Key=on/off
echo -en "\nQuel reseau ? [1-$(($j-1))]"
read Choix
Essid=`sed -n $(($Choix+1))'p' essid.lst | cut -d':' -f1`
Key=`sed -n $(($Choix+1))'p' essid.lst | cut -d':' -f2`
echo -e "\nVous avez choisis le reseau $Essid"

## Création du fichier wifi.log
echo -e "########## Fichier wifi.log ##########" > wifi.log
echo -e "\n## Votre interface wifi est $Eth, vous voulez vous connecter au reseau $Essid avec key=$Key ##" >> wifi.log
echo -e "\n## Commande iwconfig $Eth essid $Essid (Choix de l'Essid) ##" >> wifi.log
iwconfig $Eth essid $Essid >> wifi.log 2>&1
err=$?
if [ "$err" = 0 ]; then
    {
        case "$Key" in
                on ) echo -e "\nClef wep ?"; read Key; iwconfig $Eth key $Key >> wifi.log 2>&1;;
                off ) echo -e "\nPas besoin de clef wep !";;
                * ) echo " ";;
        esac
        echo -e "\n## Comande dhclient (Pour la connexion en Dhcp) ##" >> wifi.log
        dhclient $Eth >> wifi.log 2>&1 ## Cette comande ne revoie jamais d'érreur car $?=0 dans tous les cas ????
        err=`cat wifi.log | grep -c "No DHCPOFFERS"` ## Pour corriger : err=1 si erreur
    }
else
break
fi

## Message de réussite ou d'echec
if [ "$err" = 0 ]; then
{
        IP=`ifconfig $Eth | grep "inet adr" | cut -d':' -f2 | cut -d'B' -f1` ## On trouve l'adresse ip
        echo -e "\nVous être maintenant connecté à l'essid $Essid avec l'adresse ip $IP"
        echo "Aurevoir !"
}
else
{
        while [ "$err" != 0 ]; do
        echo -en "\nIl il y a eu une érreur, voulez vous voir le fichier de log ? [O/N]"
        read log
        case "$log" in
                o | O ) clear; cat wifi.log && err=0;;
                n | N ) echo -e "\nAurevoir !" && err=0;;
                * ) echo -e "\nJe n'ai pas compris, vous pouvez répeter ?";;
        esac
        done
}
fi

## Netoyage
rm wifi.log essid.lst essid.tmp
exit 0







Voila la chose.
J'aimerais que vous testez voir si c'est utilisable sur diverses distributions, parce que j'utilise beaucoup les filtres.

Puis je n'ai jamais eu de cours d'info alors si vous voyez des choses incoherentes dites le moi.
Si vous trouvez des bug ça m'interesse !
Je suis ausi avide d'astuces de progamation !

Mes projet pour la suite :

-Intégration du code dans une interface semi graphique (avec dialog et/ou tput)
-Un choix ip statique avec création d'un fichier /etc/network/interfaces

Merci pour vos réactions. :)
A voir également:

5 réponses

Bonsoir,

Le script fonctionne sous debian Etch
0
moi je n'arrive pas à le faire fonctionner avec Cygwin !!
Qui saurait me dire pourquoi ??
0
Salut , j'utilise la distribution NuTyX et ton script fonctionne dessus ; juste remplacé dhclient par dhcpcd pour nutyx et ça roule impec
Merci
0
les points virgules après les instructions ne sont pas necessaires
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
24 mars 2011 à 13:21
Euh... desquels tu parles ?

Ceux des instructions "case...esac" ne sont pas nécessaires, ils sont OBLIGATOIRES !!! ;-\
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
24 mars 2011 à 14:23
Salut.
une remarque pour faire suite ç celle de Geantbrun :
Il faudrait avant tout chose tester si les exécutables utilisés exists (dhclient, iwconfig...)
et éventuellement réflechir à mettre dans des variables au début (type makefile) les différents programmes, comme ça, si l'utilisateur veux en changer c'est simple. exemple :
alias DHCP=dhcpclient
if [ ! which DHCP ]
  then echo "le programme de dhcp est introuvable"
  exit 1
fi
0