Llistant SSID's: WMI vs Perl

Part de la feina que havia de fer al 3GSM consistia en escanejar les xarxes inalàmbriques que hi havia en rang (podien arribar fins les 300 sense moure’s massa). De totes aquestes xarxes calia veure quines eren legítimes i quines s’havien muntat sense permís exprés de l’organització.

Com que els portàtils dels que disposàvem corrien windows, em van venir al cap unes tools que vaig descobrir a LISA’05: Wireless Weapons of Mass Destruction for Windows, concretament la utilitat ssidscan.vbs que suposadament retorna un llistat d’SSID’s per command line per tal de poder parsejar els resultats a posteriori… he dit suposadament, aquest és el resultat:

crippled WMI ssid listing

Com veieu, per un bug documentat (i pel que sembla, no arreglat encara (!!!) no mostra correctament el nom dels SSIDs real: lletres addicionals, altres que falten, caràcters estranys en alguns casos…

Vist l’èxit de la interfície WMI de windows i el fet que tinc una nokia 770 que ve amb perl de sèrie… KISS:

#!/usr/bin/perl -w

use strict;

my $iface='wlan0';
# Llistat d'ap's autoritzats en els canals permesos
my %auth_aps = (ssid1 => [1,2,3],
ssid2 => [10,13]
#...
);
my @iwlist = `iwlist $iface scan`;
my @ssids = grep(s/\s+ESSID:"(.*)"\n/$1/,@iwlist);
my @channels = grep(s/\s+Channel:(\d)\n/$1/,@iwlist);

foreach my $ssid (@ssids) {
    print "Unauthorized access point detected: $ssid\n" if not defined $auth_aps{$ssid};
}

Pipejant l’script amb sort & uniq ja tenim lo que buscava, sense complicacions. Per una versió més elaborada, podeu preguntar a en MiKi ;)