#1 Le 24/05/2017, à 18:32
- zb2ooby
Recuperer SSID wifi avant login session
Bonjour,
J'ai ecrit un petit script en bash qui recupere le SSID de mon réseau via iwconfig et ecrit une resolution DNS dans etc/hosts
ce script fonctionne parfaitement lorsque je le lance manuellement
mais pas completement automatiquement lorsque je le lance avant le lancement de l'environnement graphique
voici ce que j'ai testé
1/ creer un .desktop dans .config/autostart ou /etc/xdg/autostart : fonctionne tres bien
inconveniant :
pas de dossier autostart dans toute les distrib (ex : LXDE)voir pas de dossier .config ex (raspberry) or je voudrais qu'il fonctionne pour le maximum de distributions
necessite obligatoirement un environnement graphique et je voudrais qu'ils puisse se lancer avec ET sans
2/ modifier .bashrc : fonctionne
inconveniant :
ne se lance pas au demarrage sauf si lancement d'un terminal ==> pas pratique
3/ modifier rc.local : ne fonctionne pas
4/ creer un script d'init : fonctionne
inconveniant :
script lancé mais ne reconnais pas le SSID car execute le test comme FAUX
cela me fait dire que iwconfig ne fonctionne pas avant lancement du DE
je suppose donc que l'interface wlan0 n'est pas UP avant lancement du DE
à noter que en filaire avec eth0 ce probleme n'apparait pas.
à noter également que le script d'init est bien lancé en dernier ($all)
5/ creer une tache cron
Meme soucis qu'avec le script init : le script fonctionne mais la valeur de la variable SSID reste vide
6/ creer un service avec systemd
meme soucis qu'avec le script init et le cron
donc question :
COMMENT RECUPERER LE SSID D'UNE INTERFACE WIFI AVANT LE LOG ?
voici le script en question :
#!/bin/bash
### BEGIN INIT INFO
# Provides: nuage.hosts
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Permet le loopback
# Description: check le reseau au boot. si reconnais le reseau interne alors integre la resolution DNS dans /etc/hosts
### END INIT INFO
SSID=$(sudo iwconfig wlan0 2> /dev/null | grep -o 'ESSID:.*' | cut -d '"' -f 2)
ETH0=$(sudo arp -a | grep eth0 | cut -d " " -f 1)
##on vide le fichier etc/hosts
#suppression des domaines existants
sudo sed '/#mesdomainesdebut/,/#mesdomainesfin/d' /etc/hosts
#suppression des balises existantes
sudo sed -i '/domaines/d' /etc/hosts
##on le rerempli
#mise en place des balises dans /etc/hosts
sudo echo '#mesdomainesdebut' | sudo tee --append /etc/hosts > /dev/null
sudo echo '#mesdomainesfin' | sudo tee --append /etc/hosts > /dev/null
#connexions
if [ "$SSID" = Livebox ] || [ "$ETH0" = box.home ]; then
sudo sed -i '/#mesdomainesdebut/ a\12.12.12.12 mon.domaine.com' /etc/hosts | sudo tee --append /etc/hosts > /dev/null
else
#suppression des domaines existants
sudo sed '/#mesdomainesdebut/,/#mesdomainesfin/d' /etc/hosts > /dev/null
fi
exit
merci à tous
Hors ligne
#2 Le 26/05/2017, à 11:08
- alduc31
Re : Recuperer SSID wifi avant login session
Salut,
La majorité des distrib utilisent NetworkManager comme gestionnaire de connexion et la connexion ne se fait que lorsque une session graphique est lancée. Donc tu n'aura pas de SSID avant le login.
Ton script devrait contenir une boucle qui permet de tester à intervalle régulier la connexion :
while :
do
SSID=`iwconfig wlan0 2> /dev/null | grep -o 'ESSID:.*' | cut -d '"' -f 2`
if [ "$SSID" != "" ] ; then
# modifie /etc/host
break # sort de la boucle
fi
sleep 60 # attente 60s
done
L'interface wifi ne se nomme pas forcément wlan0. La convention de nommage a évolué avec systemd (https://www.freedesktop.org/wiki/Softwa … faceNames/) :
INTER=`iwconfig 2>/dev/null | grep 802.11 | cut -f1 -d' '`
SSID=`iwconfig $INTER 2> /dev/null | grep -o 'ESSID:.*' | cut -d '"' -f 2`
Asus Vivobook S5406MA (Core Ultra 7 155H, 16Go, AX211)
Hors ligne
#3 Le 26/05/2017, à 12:53
- moko138
Re : Recuperer SSID wifi avant login session
je voudrais qu'il fonctionne pour le maximum de distributions
##on vide le fichier etc/hosts
Si tu vises un maximum d'utilisateurs, il me semble que tu pourrais affiner ta procédure afin de préserver les exclusions dans /etc/hosts.
(Nous sommes nombreux à avoir un /etc/hosts étoffé et régulièrement enrichi.)
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
Hors ligne
#4 Le 26/05/2017, à 16:53
- zb2ooby
Re : Recuperer SSID wifi avant login session
Bonjour,
Merci beaucoup à tout les deux.
- alduc31 :
En effet je n'avais pas pensé à la boucle. C'est peut-être la seule solution.
Mais je trouve dommage de devoir faire tourner un script toute les minutes quand une seule écriture au boot pourrait suffire...cela dit ça règle le problème de changement de réseau en cours de route si l'ordi n'a pas été éteint. donc pourquoi pas. Je vais tester ça et je donne le retour asap. Merci
- Moko138 :
pour le commentaire "#on vide le fichier /etc/hosts" il est assez mal tourné. On ne le vide pas en fait on supprime juste l'intervalle entre les deux balises préalablement écrites en fin de fichier. Donc cela conserve les données déjà existantes dans le fichier.
Maintenant peut-être effectivement que les balises #mesdomainesdebut et #mesdomainesfin ne sont pas assez "excluantes" en effet. Je vais voir si je peux faire un truc un peu moins "friendly" pour éviter les effacements inopinés. Merci à toi aussi
Sinon que pensez-vous de filtrer par adresse MAC et non plus par id de connexion ? plus de problème de nom d'interface et un ifconfig peut suffire à les réveler toute (merci Frodon...hum ==> je sors)
Dernière modification par zb2ooby (Le 26/05/2017, à 17:03)
Hors ligne
#5 Le 26/05/2017, à 17:11
- moko138
Re : Recuperer SSID wifi avant login session
que pensez-vous de filtrer par adresse MAC et non plus par id de connexion ?
Je ne suis pas compétent.
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
Hors ligne
#6 Le 26/05/2017, à 17:38
- alduc31
Re : Recuperer SSID wifi avant login session
J'avais plutôt compris que tu filtres le SSID pour discriminer le réseau. Pour l'@MAC c'est celle de la carte wifi...
Asus Vivobook S5406MA (Core Ultra 7 155H, 16Go, AX211)
Hors ligne
#7 Le 26/05/2017, à 17:58
- zb2ooby
Re : Recuperer SSID wifi avant login session
J'avais plutôt compris que tu filtres le SSID
oui c'est exactement ce que je veux.
Pour l'@MAC c'est celle de la carte wifi...
c'est ce qui me semblais mais je n'étais pas sûr ;-)
Hors ligne
#8 Le 27/05/2017, à 13:05
- zb2ooby
Re : Recuperer SSID wifi avant login session
Pour l'@MAC c'est celle de la carte wifi...
En y regardant de plus près et en testant sur différentes machines connectée sur le même réseau il apparait que l'ont doit pouvoir filtrer par adresse mac.
Dans iwconfig cela apparait sous le libellé "Access Point". J'ai le même sur toute les machines du réseau
pi@cuisine:~ $ sudo iwconfig
wlan0 IEEE 802.11bgn ESSID:"Livebox-b9ce"
Mode:Managed Frequency:2.437 GHz Access Point: 48:83:C7:0B:2B:06
Bit Rate=72.2 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
Link Quality=51/70 Signal level=-59 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:3 Invalid misc:0 Missed beacon:0
Cela ressemble étrangement à une adresse MAC. peut-être l'adresse MAC de la la box ou de sa carte wifi. quelqu'un peut-il me renseigner la dessus ?
est-ce bien une adresse MAC ? si oui de quel équipement (box ou carte wifi box) ? si non change t'elle à chaque reconnexion ou pas ?
merci
Hors ligne
#9 Le 27/05/2017, à 14:50
- alduc31
Re : Recuperer SSID wifi avant login session
Le point d'accès est l'équipement au quel tu te connectes (box, routeur, ...). Il ne change pas de connexion en connexion.
Tu n'y as accès qu'une fois connecté donc filtré le SSID ou le "Access Point" revient au même sauf si le SSID est caché (?) ou modifié...
Asus Vivobook S5406MA (Core Ultra 7 155H, 16Go, AX211)
Hors ligne
#10 Le 27/05/2017, à 15:37
- zb2ooby
Re : Recuperer SSID wifi avant login session
OK merci beaucoup
J'ai déjà un peu de matière pour bidouiller.
Le coup de la boucle fonctionne bien pour ce qui est de récuperer un ssid au Boot. On ne le récupère pas avant le login mais on se laisse une chance de l'avoir à un moment donné sans intervention manuelle donc je vais continuer dans ce sens.
Pour l'interface wlan0
L'interface wifi ne se nomme pas forcément wlan0.
En fait je ne sais pas pourquoi j'ai lancé iwconfig avec l'interface puisque cela fonctionne très bien sans :
SSID=$(sudo iwconfig 2> /dev/null | grep -o 'ESSID:.*' | cut -d '"' -f 2)
Merci encore pour vos réponses
Je laisse le fil ouvert quand même au cas où quelqu'un aurait une manipulation pour checker les réseaux WiFi disponibles avant le login.
Hors ligne
#11 Le 27/05/2017, à 15:48
- alduc31
Re : Recuperer SSID wifi avant login session
Normalement avec ces 2 commandes tu as la liste :
ifconfig <interface> up
iwlist <interface> scan
avec <interface> le nom de l'interface.
Mais avec networkmanager en parallèle pas sûr que ça fonctionne. NetworkManager a son propre outil en ligne de commande (nm-cli il me semble) qui permet aussi de lister les wifi. Je l'ai jamais utilisé donc difficile de t'en dire plus.
Asus Vivobook S5406MA (Core Ultra 7 155H, 16Go, AX211)
Hors ligne
#12 Le 27/05/2017, à 22:38
- zb2ooby
Re : Recuperer SSID wifi avant login session
Bon j'ai un peu testé tout ça
iwconfig
iwlist
nmcli
les trois solutions fonctionnent très bien on récupère ce qu'on veut mais toujours pas avant le login
A moins de mettre un sleep de quelque secondes en début de script mais cela ralentit légèrement l'allumage et le démarrage...pas très propre...
Hors ligne
#13 Le 01/06/2017, à 14:18
- zb2ooby
Re : Recuperer SSID wifi avant login session
Bien,
J'ai laissé mon script fonctionner avec iwconfig
je n'ai pas retenu l'idée de la boucle. Cela m'a posé des soucis à l'exctinction des services.
j'ai par contre crée un service avec systemd qui recharge toute les 60 secondes
donc tout ça fonctionne et ça fait bien tout ce qu'on lui demande. le script est rechargé toute les minutes donc même au sortir d'une veille si on à changé de réseau ça se remettra à jour. ce qui est assez sympa
Pour conclure : tout fonctionne
Mais nous n'avons toujours pas réellement répondu au sujet de ce Topic, et, dans le but d'en apprendre un peu plus. j'aimerais qu'on puisse :
élucider le fait de ne pas pouvoir scanner les réseaux wifi avant l'ouverture d'une session ?
Je ne comprend pas bien l'idée que je sent poindre selon laquelle la carte wifi ne se chargerai que juste après le login et non juste avant rendant évidemment impossible l'utilisation d'outils tels que iwconfig avant le login...
Si c'est bien ce qui se passe ( et est-ce bien ce qui se passe d'abord ?) pourquoi avoir pensé le truc ainsi ? (sécurité des réseaux wifi ?)
Merci à tous pour vos conseils
Hors ligne