====== Appunti su wireless ====== ===== Wireless Extensions ===== Interfaccia offerta dal kernel Linux verso le periferiche wireless. Il parametro kernel da abilitare per avere le Wireless Extensions è **CONFIG_NET_RADIO**. Ogni versione di kernel ha le sue Wireless Extensions (look into ''linux/include/linux/wireless.h''), esistono eventualmente le patch [[http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/iw241_we16-6.diff]]: ^ Kernel ^ Wireless Extensions ^ | 2.0.30 e 2.1.17 | ?? 1 | | 2.2.14 e 2.3.24 | 9 | | 2.4.22 | 15 | ===== Wireless-tools ===== Set di programmi user-space che si interfacciano con le Wireless Extensions. La versione corrente è la 26. Dalla versione 20 in poi, questi tools richiedono le Wireless Extension 9 o successive. Il sito di riferimento è: [[http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html]] ==== iwconfig ==== Qeusto è il comando principale utilizzato per impostare il funzionamento della scheda WiFi: canale, modalità, ESSID, crittografica, ecc. Lanciato senza parametri mostra le impostazioni correnti delle interfacce che hanno le wireless extension. ==== iwpriv ==== Con il comando **''iwpriv''** si impostano parametri specifici per ciascun driver wireless, al contrario di ''iwconfig'' che invece gestisce i parametri generici condivisi da tutti i driver. I parametri dipendono ovviamente dal driver wireless in questione, ad esempio alcuni utilizzano questi parametri privati per impostare la protezione WPA. ==== iwlist ==== Mostra i dettagli di una interfaccia wireless. Ad esempio può servire ad elencare i tipi di chiave supportati dalla scheda, i bit rate, elenca gli access point rilevati (scanning), ecc. Tramite la funzione **scanning** è possibile ottenere informazioni sulla qualità di un segnale ricevuto. Le informazioni riportate sono **Link quality**, **Signal level** e **Noise level**, purtroppo non tutti i driver o hardware sono in grado di riportare queste informazioni, alcuni riportano un valore fittizio costante. ^ Link quality | Questo valore riportato dai driver wireless Linux non è mai stato troppo affidabile, ma le cose stanno migliorando. Il driver calcola un valore compreso tra 0 e 100, che è il risultato di numerosi parametri tra cui forza del segnale, perdita di pacchetti, ritrasmissioni, bitrate in uso rispetto al bitrate massimo, ecc. Il valore viene riportato come rapporto tra valore calcolato e valore massimo, es. **Quality=84/100** | ^ Signal level | Livello del segnale riportato dall'hardware espresso in [[wp>dBm]] (generalmente compreso tra -20 dBm e -80 dBm) oppure in [[wp>RSSI]] (unità di misura arbitraria, generalmente compresa tra 0 e 255 oppure tra 0 e 100). Il modo di rappresentare il valore dipenda dall'hardware e dal driver, ad es. **Signal level=-36 dBm** oppure **Signal level=52/100** | ^ Noise level | Io c'ho ancora da vedere un hardware/driver che riporta correttamente il livello di rumore! Dovrebbe essere qualcosa del genere: **Noise level:-90 dBm** | In [[wifi_signal_quality|questa pagina]] abbiamo una spiegazione del termine //signal quality// etc. ===== Avaya Wireless PC-Card ETS (Gold) ===== Vedere la pagina [[wifi_pccard]]. ===== U.S. Robotics 22 Mbps Wireless PC-Card (USR2210) ===== Vedere la pagina [[wifi_pccard]]. ===== Sitecom Wireless Network USB Adapter 54g Turbo WL-172 ===== Vedere la pagina [[wifi_pccard]]. ===== Scheda PCI Intersil Corporation ISL3890 (Prism GT/Prism Duette) ===== Queste sono le [[wifi_intersil|informazioni ottenute con lspci]] da una di queste schede sul bus PCI. ==== Kernel 2.6.12 ==== Il progetto originato da [[http://prism54.org/]] è stato incorporato nei sorgenti ufficiali del kernel Linux. Basta abilitare l'opzione ''**CONFIG_PRISM54=m**'' per ottenere il modulo ''**prism54.ko**'', è indispensabile però procurarsi il firmware da caricare sulla scheda, salvarlo nel file ''**{{.wifi:isl3890.tgz|/usr/lib/hotplug/firmware/isl3890}}**''. Il modulo kernel provvede ad effettuare l'upload del firmware generalmente quando l'interfaccia viene attivata con **''ifconfig eth1 up''** oppure quando viene configurata con ''iwconfig''. Se il firmware non è disponibile si ha questo messaggio in kern.log: Dec 13 20:10:15 localhost kernel: prism54: request_firmware() failed for 'isl3890' Dec 13 20:10:15 localhost kernel: eth0: could not upload firmware ('isl3890') ==== Kernel 2.4.x con driver ISL3890-0.1.0 ==== Con un kernel precedente alla versione 2.4.22, l'unica possibilità di usare questa scheda wireless è quella di compilare gli appositi driver. A partire dalla versione 2.4.22 tale driver è diventato disponibile come patch da applicare al kernel, infine è stato incorporato nella versione ufficiale del kernel (vedi paragrafo precedente). Sul sito [[http://prism54.org/]] esistono i driver per le schede wireless PCI e Cardbus con chipset ISL3880, ISL3877 e ISL3890 (Prism GT, Indigo e Duette). Dopo aver compilato il tutto si ottiene il driver ''**islpci.o**'' che puo' essere caricato direttamente con ''insmod''. Per la compilazione del driver sono richieste anche delle patch al kernel, vedere le note sulla [[wifi_isl3890_compile|compilazione del driver ISL3890]]. Dopo aver caricato il modulo si deve configurare i parametri di funzionamento della scheda utilizzando l'utility generica ''**iwconfig**'' (dai Wireless-tools) oppure l'utility specifica per il driver Intersil ''**setoid**''. One configuration that I was able to set: two cards in Ad-hoc Mode. This is the configuration script: IslpciAdHocConfig. Another working config: one card in Client Mode (Managed), talking to an Access Point U.S.Robotics at 11 Mbps: IslpciClientConfig. This driver can work in Access Point mode (but I was unable to do so), a more advanced mode than Ad-hoc. This means that the host can also work as an Access Point instead of only work as a single station. With older cards and drivers this was not so common. For older Intersil cards (Prism2/2.5/3) there was a specific driver for using them in Access Point Mode. This is the home page for the drivers [[http://hostap.epitest.fi/]], and there is some tips on using Access Point Mode with Ethernet Bridge: [[http://trekweb.com/~jasonb/articles/hostap_20030727.shtml]]. ===== Scheda USB Ralink ===== Con il kernel 3.0.0 la scheda non viene riconosciuta e attivata automaticamente, sebbene il modulo kernel **rt2800usb** sia compatibile. Bisogna comunque installare il firmware con il pacchetto **firmware-ralink** e quindi istruire il modulo kernel ad usare la periferica: modprobe rt2800usb echo 2001 3c1b > /sys/bus/usb/drivers/rt2800usb/new_id L'ID usb della periferica si vede con **''lsusb''**: lsusb Bus 001 Device 010: ID 2001:3c1b D-Link Corp. ===== Modalità e parametri di funzionamento ===== Una scheda wireless può essere configurata per lavorare in diverse modalita'. Il tool **''iwconfig''** conosce i seguenti modi (tra parentesi il nome riportato dal driver Intersil): ==== Modo Auto (Promiscous) ==== Unico modo con il quale per ora ha funzionato il driver Intersil. Nota: con ''iwconfig'' sembra che si possa cambiar canale, però cambiandolo da una parte sola tutto continua a funzionare! SSID Non impostato, errore SET: Error in PIMFOR reply 3 10000002 36 0 34 Frequency Impostato OK, 2.422GHz Bit Rate Impostato OK, 54Mb/s ==== Modo Managed (Client) ==== Network composed of many cells, with roaming or with an Access Point. ==== Modo Ad-hoc ==== Network composed of only one cell and without Access Point. This mode is sometimes referred as **Independent BSS Mode**, commonly referred to as IBSS Mode. In this mode, the wireless network acts more like a shared Ethernet cable: all traffic is peer-to-peer. Ad-hoc network is the simplest form of Wireless LAN is a network composed of a few nodes without any bridging or forwarding capability. All nodes are equal and may join or leave at any time, and have equal right to the medium. In fact, it's very much like an Ethernet, where you may add or remove node at discretion. This is the kind of radio networks deployed in homes of small offices. Of course, for this to work all nodes must be able to see all the other nodes of the network, to be able to establish communication with them. When a nodes goes out of range, he just loose connection with the rest of the ad-hoc network. Effectively, this is a single cell network. One of the node of the ad-hoc network may provide routing or proxying to communicate to the rest of the work, but nodes are still confined to the area within that cell. ==== Modo Master (Access Point) ==== The node is the synchronisation master or act as an Access Point. In fact, an Access Point is simply a bridge, connected on one side to the radio network and on the other side to Ethernet (usually), forwarding packets between the two networks. A bridge works at the MAC level, just looking through the MAC headers to make its decisions (filtering) and changing MAC headers according to the MAC protocol used. This means that NetBeui and IPX work across the access point, and that the nodes connected to the radio must use the same TCP/IP subnet as the Ethernet segment the access point is connected to. When wireless clients (specifically 802.11b) talk to each other via an Access Point, we say that we are using **Infrastructure BSS Mode**. This is as oppossed to **Ad-Hoc Mode** where clients talk to each other directly. In this mode, the wireless network acts somewhat like an Ethernet hub: all traffic travels to or from the Access Point; clients do not communicate directly. The main advantage of BSS Mode is that two clients that can't directly see each other, but who can both see the central Access Point can still talk to each other. ==== Modo Repeater ==== The node forward packets on the air. ==== Modo Secondary ==== The node act as a backup master/repeater. ==== SSID ==== ==== Frequency or channel ==== The frequency or channel parameter is the physical separation between networks (the keyword freq and channel are synonymous). For frequency hopping devices, it might be the hopping pattern. ==== NWID ==== Network id or domain, to distinguish different logical networks which might be on the same frequency. ===== Canali e frequenze assegnate ===== Da [[http://www.wlana.org/learn/tables.htm]]: Ch North American European Japanese 1 2.412 GHz N/A N/A 2 2.417 GHz N/A N/A 3 2.422 GHz 2.422 GHz N/A 4 2.427 GHz 2.427 GHz N/A 5 2.432 GHz 2.432 GHz N/A 6 2.437 GHz 2.437 GHz N/A 7 2.442 GHz 2.442 GHz N/A 8 2.447 GHz 2.447 GHz N/A 9 2.452 GHz 2.452 GHz N/A 10 A 2.457 GHz 2.457 GHz N/A 11 B 2.462 GHz 2.462 GHz N/A 12 C N/A N/A 2.484 GHz Undocumented channels 12 C 2.467 GHz 13 D 2.472 GHz 14 E 2.484 GHz ===== Antenna diversity ===== By having two antennas, even quite close (a few cm), the condition at each antenna is very often totally different. One antenna may give a poor signal and the other a good one, and a few ms later it might be the reverse. So, before receiving each packet, the receiver chooses the best antenna of the two by comparing the signal strengths, and so can avoid most of the fade out periods. ===== Ethernet bridging ===== Using a wireless interface as an Access Point on a Linux box, you can use the Linux kernel's 802.1d ethernet bridging option to perform the functions of a hardware bridge; you will use one existing Ethernet interface and the wireless one together. Devices on both interfaces will share the same subnet. You'll need the Linux Ethernet Bridging Utilities that work with the kernel bridging functionality. You need to remove any existing IP addresses on your chosen interfaces, first (assuming ''wlan0'' is the wireless interface and ''eth0'' is the wired interface): ifconfig wlan0 0.0.0.0 ifconfig eth0 0.0.0.0 Then, you'll need to enable bridging, with the **''brctl''** utility, by adding a bridged interface, br0, assigning physical interfaces ''wlan0'' and ''eth0'' to it, and finally using ''ifconfig'' to assign the new virtual bridged interface an IP address: brctl addbr br0 brctl addif br0 eth0 brctl addif br0 wlan0 ifconfig br0 192.168.1.1 up On Debian the bridge tools are in bridge-utils package. CONFIG_BRIDGE, bridge.o. ===== Sustained transfer rate ===== Room environment. 850 kb/s 54 Mbps Win2k SMC2802W - Win98 SMC2802W 590 kb/s 11 Mbps Win98 SMC2802W - AP U.S.Robotics 2249 690 kb/s 11 Mbps Linux SMC2802W - AP U.S.Robotics 2249 ===== Troubleshooting ===== Anzitutto ci vuole uno strumento per analizzare i segnali WiFi presenti nell'aria. Si utilizza l'opzione **scanning** di **iwlist**, ovviamente ci vuole una scheda WiFi supportata dalle Wireless Extensions di Linux. In questo esempio si usa l'hardware de La Fonera modificata installando il sistema operativo Linux OpenWrt 2.6.19.2: root@OpenWrt:~# iwlist ath0 scanning ath0 Scan completed : Cell 01 - Address: 00:40:05:30:CD:4E ESSID:"wifilan" Mode:Master Frequency:2.437 GHz (Channel 6) Quality=14/94 Signal level=-81 dBm Noise level=-95 dBm Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 22 Mb/s Extra:bcn_int=100 Cell 02 - Address: 00:C0:49:A6:9C:14 ESSID:"texnet" Mode:Master Frequency:2.432 GHz (Channel 5) Quality=45/94 Signal level=-50 dBm Noise level=-95 dBm Encryption key:on Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 22 Mb/s Extra:bcn_int=100 Cell 03 - Address: 00:18:0A:01:3E:66 ESSID:"TexWIFI" Mode:Master Frequency:2.432 GHz (Channel 5) Quality=43/94 Signal level=-52 dBm Noise level=-95 dBm Encryption key:off Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s 11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s 48 Mb/s; 54 Mb/s Extra:bcn_int=100 Extra:wme_ie=dd180050f2020101850002a3400027a4000042435e0062322f00 Extra:ath_ie=dd0900037f01010020ff7f **NOTA**: Pare che il **Signal level** venga riportato dall'hardware facendo una media su un certo periodo di tempo, quindi cambiando le condizioni (antenna, ecc.) si deve aspettare qualche secondo prima di ottenere un nuovo valore stabile. ==== Kismet drone ==== Un'altro ottimo strumento è **kismet**, in questo caso conviene utilizzare **kismet_drone**, cioè una versione ridotta del server che acquisisce i pacchetti e li rimanda ad un'altro host via TCP/IP. Su La Fonera si installa il pacchetto: ipkg install kismet_drone e si configura il file **''/etc/kismet/kismet_drone.conf''** impostando il parametro **source**: source=madwifi_g,wifi0,wireless Per avviare il drone si esegue **''/usr/bin/kismet_drone''**. Su un PC si installa **kismet** (kismet ha in realtà una architettura client/server, il pacchetto Debian include entrambe le componenti) e si configura ''/etc/kismet/kismet.conf'' impostando (10.0.1.46 è l'indirizzo IP de La Fonera): source=kismet_drone,10.0.1.46:3501,drone Primi passi in Kismet: - Attendere che kismet acquisisca alcuni pacchetti: le varie network vengono mostrate a video. - Ordinare le network ad esempio per signal level (tasti **s**, **Q**). - Evidenziare una network con i tasti freccia, per ottenere maggiori informazioni premere **i** oppure **Enter**. Chiudere il popup con **q**. Vedere anche questo semplice **[[http://www.wirelessdefence.org/Contents/kismetMain.htm|Kismet Main]]**.