Rechercher : dans
Par :

Script shell : gestionnaire wifi

Dernière réponse le 16 nov 2009 à 00:20:59 philpep-tlse, le 24 jan 2008 à 04:19:58 
 Signaler ce message aux modérateurs

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. :)
Configuration: Linux
Firefox 3.0

Meilleures réponses pour « Script shell : gestionnaire wifi » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...

1

zelda, le 13 fév 2008 à 22:44:09

Bonsoir,

Le script fonctionne sous debian Etch

Répondre à zelda

2

ctn, le 16 nov 2009 à 00:20:59

Moi je n'arrive pas à le faire fonctionner avec Cygwin !!
Qui saurait me dire pourquoi ??

Répondre à ctn

3

 ctn, le 16 nov 2009 à 00:20:59

Moi je n'arrive pas à le faire fonctionner avec Cygwin !!
Qui saurait me dire pourquoi ??

Répondre à ctn