wpa_cli

Régóta zavar, hogy a wpa_supplicant-hoz tartozó parancssori wpa_cli iszonyat szarul dokumentált eszköz. Szerettem volna végre nem kliketi-klikk, hanem oldschool UNIX módjára, parancssorból piszkálni a wifit. Melyik ap-ra csatlakozzon a sok közül, meg főleg hogyan.

Mivel szeretem a kihívásokat, az elmúlt napokban (köszönhetően az XXX-nek és az ő XXXVISITOR nevű AP-inek - amikben delej van, csak IP-cím nincs :-)), fehérvári tanfolyamom szüneteiben sikerült kigyökölnöm, hogy ha *parancssorból* akarom a wpa_supplicantot piszkálni, annak mi a módja.

Ami nálam fontosnak tűnik: wpa_supplicant.conf -ba:


update_config=1 # ez kell a módosíthatósághoz
ctrl_interface=/var/run/wpa_supplicant # nyilván lehet másutt is
ctrl_interface_group=network # vagy bármilyen unixos csoport, de legyek benne

network={
 key_mgmt=NONE
 disabled=1
 id_str="publicwifi"
 }

Ha ez a network blokk az első a wpa_supplicant.conf -fájlban, az azért nagyon kellemes, mert stabilan ez lesz a 0-s network_id-jű blokk. Ez nem fontos de kényelmes, mert ekkor nem kell agyalogni, meg lekérdezni, hogy melyik is az ilyen célra fenntartott bejegyzésem, helyből piszkálhatom a 0-t. És ha disabled-ben van, az pedig azért jó, mert nem mászik fel csak úgy bármilyen nyílt wifire, legalább meg kell rá kérni. (Az id_str-nek gyanúm szerint FBSD-n nincs semmi jelentősége, de Linuxok úgy tűnik szeretik ezt az infot, mert jól lehet a mindenféle interfaces fájlban rá hivatkozni. Javítás: közben kiderült, hogy az id_str azért jó, mert a példákban számmal megadott network-blokkra ennek segítségével név szerint is hivatkozhatunk. Azaz a lenti wpa_cli parancsokban a 0 helyett megadható a publicwifi név is. És nyilván ekkor ez a bejegyzés nem kell, hoy a legelső legyen a konfig fájlban.)

No szóval: ott vagyok valahol, ahol tudom, hogy van wifi (de legalábbis bízok benne). Szkennelek egyet (de legalábbis lekérdezem a szken eredményét). Ez nekem FreeBSD-n így néz ki:


ifconfig wlan0 list ap

(Időnként van olyan, hogy baromi hosszú a hely SSID-je - ilyen pl. az őslényrőllll elnevezett bevásárlószar mekije. Ekkor kell egy -v opció is az ifconfignak. Az eredmény katasztrofálisan ronda, de benne van a hosszú SSID.)

Ami korábban kimaradt: a wpa_cli set_network paranccsal megadott azonosítójú network-blokk paramétereit lehet beállítani parancssorból, azaz hogy pontosan miket lehet vele állítani, azokat a paramétereket a man wpa_supplicant.conf -ból lehet kilesni. Átlagos esetben egy network-blokkban az ssid, psk paraméterek szoktak kelleni. (Ritkábban a proto és key_mgmt.) Elképzelhető, hogy a priority paramétert akarjuk állítani (bár ilyen ideiglenes esetben ez nem valószínű). Ha rejtett wifihez akarunk kapcsolódni, akkor kell a scan_ssid=1 paraméter, illetve a bssid=aa:bb:cc:dd:ee:ff is - mondjuk ez utóbbit azért ritkán szokták tudni fejből.

No tehát megvan az előkészített wpa_supplicant.conf, és a kezünkben vannak a hálózati paraméterek (ssid, jelszó, stb). Ezután:


wpa_cli set_network 0 ssid \"SSID\"
 # ez a fenti 0-s ID-jú network blokk
 # beállításait finomítja
 # nyilván a valós SSID-t kell begépelni
 # és tényleg ilyen hülyén kell beírni a takart idézőjelekkel
wpa_cli enable_network 0
 # engedélyeztük, a wpa_supplicant a háttérben már fel is cuppant

Persze előforduhat, hogy nem nyílt az a wifi, de tudjuk a paramétereket (szálloda pl, és megkaptuk az adatokat)
Ekkor az enable előtt be lehet (kell) állítani a többi paramétert is, pl így:


wpa_cli set_network 0 proto WPA # vagy RSN - ami WPA2-t jelent
wpa_cli set_network 0 key_mgmt WPA-PSK # WPA (vagy WPA2), jelszóval
wpa_cli set_network 0 psk \"jelszó\" # itt a jelszava
wpa_cli enable_network 0 # és már csatlakozhat is

(99% eséllyel amúgy a proto és key_mgmt nem kell, mert jók az alapértékek, azaz bőven elég az ssid és psk.)

Beállítható ugyanígy még néhány paraméter, és persze WEP-es esetben is hasonlóan kell eljárni.

Ez az eljárás persze csak akkor érdekes, ha

- nincs (vagy valamiért nem akarjuk használni) grafikus wifi turkáló (pl. az XFCE-hez én nem tudok natív grafikus wifi-bizgetőt, ugyanis az xfce-wlan-plugin épp csak jelerősség kijelzésére jó, de ilyen fel/lecsatlakozáshoz már nem)
- és nem akarjuk összeszemetelni a wpa_supplicant.conf -ot, de egy gyors netezés belefér.

Hozzászólások

Na ez májer, köszi :)

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."

Nyilván nem mondok újat, de azért leírom: xfce alatt wicd-client, parancssorból meg wicd-curses a barátom, remekül teszik a dolgukat. Bár nem közvetlen a wpa_supplicant.conf-ot piszkálja, hanem saját konfigokat ment minden sessionhoz. Az egyetlen bajom vele, hogy több csatolót nem tud még kezelni egyidejűleg, pl ethernet és wifi együtt csak úgy megy, ha mondjuk kézzel felhúzom az egyiket.

Kösz az infót, kár, hogy a wicd is egy (jelenleg még) Linux-only izé, és mint ilyen rajtam nem segít. (Ellenben végre megnéztem a wpa_gui-t, és azt kell mondjam, azon az egy szál gépemen, amin van Qt, azon teljesen jónak tűnik. Vajh mi a bánatért nem csinált még senki ugyanilyet GTK-val - hordozhatóra? És akkor az xfce-wavelan-plugin-t már csak egy aprósággal kéne kiegészíteni, hogy mondjuk az xfce-mixer-hez hasonlóan, legyen egy beállítása, hogy bal kattintásra elinduló program, arra rá lehetne kötni ezt a wpa_ggui -t, és készen is lennénk.

Ah, köszi, ezt kipróbálom. PC-BSD KDE-s network managerében nem találtam meg, hogy lehet hidden SSID-s hálózathoz csatlakozni (van egy olyan sanda gyanúm, hogy sehogy)

Hát a grafikus bigyóját nem ismerem. Remélem az is a /etc/wpa_supplicant.conf -ot piszkálja, és ha igen (tudtommal FreeBSD-n minden - titkosított - wifis szart azon keresztül lehet csak) - akkor simán az adott AP-t leíró network szekcióba kell még két plusz bejegyzés a minimálisan szükséges mellé:


network={
ssid="AP_neve"
psk="WEP-WPA-WPA2-jelszo"
# és a következő kettő kell hidden esetben
scan_ssid=1
bssid=aa:bb:cc:d:ee:ff # az AP MAC-címe
}