Kismet + Google Earth / Google Maps: creare una mappa degli access point wireless di una zona settembre 27, 2008
Inviato da davide in : Linux , trackback
Ho da poco acquistato un ricevitore gps e ritenendo che sia uno spreco usarlo solo per della navigazione satellitare, ho provato a fare un giretto per vedere quante reti wireless ci sono in giro…
E’ doveroso sottolineare che la ricerca di reti wifi in una determinata zona è assolutamente legittima.
Diverso è il caso se, trovata una rete libera (o ancor peggio protetta) si cerchi di accedere ad essa: per questa attività sono previste vere e proprie sanzioni!
Usando Kismet, dopo la scansione ci ritroviamo con dei log in formato csv e gps.
Il problema è ora come riportare i risultati su una mappa: ci sono diverse opzioni, qui vi fornisco i collegamenti a quelle più interessanti che ho trovato in rete, e poi la mia (che ritengo un ottimo compromesso tra qualità della mappa e semplicità di creazione):
- creare una mappa statica con gpsmap. QUI trovate un’ottima guida. E’ il metodo più semplice e veloce, ma se avete una mappa molto “affollata” è ingestibile. Poco utile anche se vi interessa poter guardare le informazioni dei vari access points. Esempio:
- creare una mappa degli access point sul percorso con Kismet, Gpsdrive, Google Earth, MySQL e un piccolo script in Python. La mappa qui è “interattiva”, nel senso che cliccando un segnalino su Google Earth esce la descrizione (solo il nome
) dell’access point. Buona soluzione, ma richiede un insieme di programmi piuttosto noiosi da configurare. La trovate QUI. Provata anche questa, e secondo me il gioco non vale la candela…
La mia soluzione
Bene, vediamo la mia soluzione. Innanzitutto ci servono solo Kismet e Google Earth (non strettamente necessario, se vi accontentate basta anche Google Maps online!).
Sappiamo che Kismet salva dei log in formato CSV… girando sul web ho trovato, a questo indirizzo, uno script Perl che trasforma i files CSV di Kismet in files KML da importare su Google Earth o Google Maps.
Non è quindi tutta farina del mio sacco, anche perchè non conosco il perl
, ma data la semplicità dello script mi ci è voluto un attimo per capire un paio di basi e migliorare il programma in modo che vengano visualizzate molte più informazioni sull’access point oltre che mostrare segnalini differenziati tra AP open e crittati.
Ebbene sì, ho preso e modificato anche i segnalini da un altro sito, noterete che sono quelli mostrati nell’esempio del punto 2 della lista precedente, ma mi piace di più vedere le reti protette in rosso
Ecco quindi lo script modificato: kismetCsvToKml
Per creare il file KML da caricare su Google Earth:
$ perl kismetCsvToKml.pl file_di_kismet.csv > file_per_google_earth.kml
Su Google Earth, importiamo il file kml andando su File -> Apri…
Ed ecco il risultato:

Kismet + GkismetCsvToKml + Google Earth: decisamente meglio!
Se non avete voglia di installare Google Earth, potete ripiegare su Google Maps online: infatti, basta inserire nel campo di ricerca di Google Maps l’URL di un file KML per fare aprire una mappa con i segnalini degli access points trovati! (ovviamente dovete fare l’upload del file kml da qualche parte)

Kismet + GkismetCsvToKml + Google Maps online: cambiano solo i segnalini
Buon divertimento!


(3 votes, average: 3.67 out of 5) 








Commenti»
davide, hai fatto bene! Ho visto che ora vengono usate le specifiche KML 2.2, e girando nella reference guide alcuni tag non ci sono più. A suo tempo non ci avevo guardato attentamente perchè lo script funzionava, e avevo solo bisogno di qualche piccola modifica. Appena avrò un attimo di tempo modificerò tutto secondo le nuove specifiche.
Per il contatore, nel sorgente ce n’è un esempio (ed è proprio un contatore degli access point): guarda la variabile $counter nella 5° riga dalla fine. E’ dichiarata all’inizio del file. Ciao!
ciao,
ho risolto il mio problema, praticamente con il nuovo google earth la sinstassi usata non veniva più letta correttamente quindi mi sono studiato la documentazione kml e ho modificato lo script.
lo spezzone è questo:
—————————————————————-
$kml=$kml.” 1\n”;
$kml=$kml.” \n”;
if($HoH{‘Encryption’} ne “None” ){
$kml=$kml.” http://davide.newdigest.com/kismetCsvToKml/wifi_enc.png\n”;
} else {
$kml=$kml.” http://davide.newdigest.com/kismetCsvToKml/wifi_open.png\n”;
}
$kml=$kml.” \n”;
$kml=$kml.” \n”;
———————————————–
siccome non conosco il perl mi chiedevo se tu sai come creare una sorta di contatore, cioè variabile impostata a 0 e per ogni segnalino incrementarla di uno così da tener conto del numero di reti trovate.
grazie e ciao
scusatemi se vi rispondo un po’ in ritardo…sono stato parecchio occupato in questi giorni.
x davide: non so come mai non ti mostri i segnalini, da me vanno…l’unica cosa che posso consigliarti è modificare lo script e provare a usare icone diverse prese da altri siti (o da locale: al posto dell’url metti il percorso di un file sul tuo pc)
x nadinecross: non sapendo cosa esattamente contiene il tuo file di kismet non posso aiutarti con certezza, però posso dirti alcuni possibili motivi di fallimento:
1-Il file di kismet che devi usare è quello con estensione .csv
2-lo script ti dà in output solamente gli accesspoint in modalità infrastruttura (no reti ad-hoc)
3-lo script scarta anche tutti gli AP con latitudine=0. Questo è un modo (grezzo!) per scartare quelli senza coordinate GPS, per cui se non stai usando un ricevitore GPS insieme a kismet, o ti trovi all’equatore, non avrai nessun risultato!
Per togliere le limitazioni indicate ai punti 2 e 3 basta eliminare le righe 31->34 dallo script.
ciao, io ho provato ma non mi funziona lo script…
il file csv di kismet p ok, ci sono tutti i dati, però nel file creato kml mi trovo scritto solo:
Wireless AP location
APs detected
Sapresti aiutarmi?
Grazie!
ciao, non so x’ il messaggio precedente non è rimasto comunque volevo sapere come mai a me su google earth non si vedono i segnalini differenti….sono tutti uguali con le puntine gialle…
ciao,
uso questo metodo da un pò di giorni ma sono capitato qua perchè volevo anche io avere le icone differenti, tra criptate e aperte, solo che con google earth mi visualizza solo le classiche puntine gialle e non le torrette rosse o verdi…. lo script è il tuo quindi non capisco perchè non vedo i segnalini… ho aperto lo script trovato gli indirizzi delle immagini e sono esatti e attivi
ciao, sisi c’è ancora…ho rinominato il file togliendo l’estensione (a causa di un cambio di configurazione del server non era più leggibile)
ciao, cercavo il file kismetCsvToKml.pl ma non è più disponibile?
molte grazie!
saluti (e buon lavoro)
ciao Frankie,
bisogna guardare bene come sono fatti i file .gps…comunque sono in tutto e per tutto dei file xml. Quindi non va bene il metodo usato per i file csv per separare le entry (si splittavano i componenti di ogni riga usando il ; come separatore).
Il metodo più efficiente per estrarne i dati sarebbe usare XSLT per fare trasformazioni sul file xml stesso…non sono esperto ma una volta nota la struttura del file gps è senz’altro molto semplice: se vuoi guardare QUI c’è un interessante mini tutorial.
Si potrebbe così leggere il file xml con l’xsl facendogli restituire in output la lista dei vari campi separati da “;” (anzichè usare tag html come nel tutorial che ti ho indicato sopra). Così poi potresti copiare il documento così generato e passarlo al mio script…
Addirittura, spendendoci un po’ più di tempo, è possibile con un xsl trasformare direttamente il file .gps in un altro file xml direttamente compatibile con Google Earth!
In questi giorni sono piuttosto impegnato ma appena mi libero ci guardo, perchè in effetti questa possibilità mi sembra interessante…
sì, più o meno… cioè: io la mappa la creo dai files *.gps, ma non lascio Kismet operativo durante gli spostamenti ma lo accendo solo quando arrivo sul posto da cui effettuare la rilevazione; intendevo questo…
è troppo chiedere qualche suggerimento più tecnico/dettagliato per modificare il tuo script?
grazie ancora
ah, dici per evitare di sovraffollare la mappa? potrebbe essere una possibilità…
hum, capito…
una cosa possibile sarebbe unire le due cose: creare lo script tipo il tuo che però accede ai *.gps ma lanciarlo, dopo aver lavorato con Kismet, di volta in volta man mano che si procede con le rilevazioni e gli spostamenti (senza cioè mantenerlo acceso continuamente).
che ne pensi?
allora… ho dato un’occhiata ai log di Kismet: a quanto pare nei file .csv kismet salva una sorta di riepilogo delle informazioni, per cui di ogni AP segna solo 1 riga (forse con la media dei valori presi oppure il valore massimo del segnale). Se vuoi usare questo formato e vuoi prendere queste informazioni per un numero limitato di punti la soluzione può essere lanciare kismet in un punto, poi uscire, andare nell’altro punto che ti interessa e rilanciarlo e così via…
Oppure, se osservi i file .gps sempre nella cartella dei log di kismet, vedrai che in essi è contenuta una riga per ogni rilevazione fatta, con relativa forza del segnale. In questo caso potresti fare uno script simile a quello proposto da me, che prenda però i dati dai file .gps. Questa soluzione è senz’altro la migliore ma tieni presente che se sono presenti tanti AP in zona secondo me la mappa risulterà troppo affollata di segnalini e quasi illeggibile.
sì, esatto! ho provato a cercare su internet ma non trovo informazioni al riguardo…
ciao!
per capire meglio… intendi dire che vuoi fissare sulla mappa la posizione esatta (nota) di un AP, e poi, diciamo, girarci attorno e loggare da vari punti il segnale emesso?
ciao!
complimenti, ho trovato la tua soluzione molto utile ed efficace!
una domanda: secondo te è possibile fare il processo “inverso”? mi spiego meglio: data nota la posizione di un AP è possibile mettere una sorta di flag/tag alle rilevazioni che Kismet fa al variare della posizione, loggando i vari parametri del segnale emesso dal medesimo AP ma a distanze diverse?
grazie