Script shell : gestionnaire wifi
philpep-tlse
Messages postés
1
Statut
Membre
-
Char Snipeur Messages postés 10112 Statut Contributeur -
Char Snipeur Messages postés 10112 Statut Contributeur -
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 :
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. :)
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:
- Shell wifi
- Classic shell - Télécharger - Personnalisation
- Changer wifi chromecast - Guide
- Voir mot de passe wifi android - Guide
- Adresse mac wifi - Guide
- Volte wifi - Guide
5 réponses
Salut , j'utilise la distribution NuTyX et ton script fonctionne dessus ; juste remplacé dhclient par dhcpcd pour nutyx et ça roule impec
Merci
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
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