Relevante Informationen
Sonntag, den 22. November 2009Da Netstumbler unter Windows 7 definitiv nicht funktioniert, dachte ich mir: “Hey, bau dir deinen eigenen Stumbler!” Und das habe ich auch getan. Dabei ist mir aufgefallen, dass ich gar nicht weiss, welche Daten fuer mich eigentlich relevant sind. Ich habe mir angeschaut, wie inSSIDer arbeitet und habe mir dort abgeschaut, wie ich Daten erfasse:
Zunaechst verbinde ich mich mit dem GPS Geraet und beginne zeilenweise die Daten zu parsen. Dann starte ich den Wifi-Scan. Jedesmal, wenn ein Scan abgeschlossen ist, schaue ich nach, ob ich das jeweilige Netzwerk schon kenne. Wenn ich es bereits kenne, dann ueberpruefe ich, ob der alte RSSI Wert geringer ist, als der neue. Ist das der Fall, dann setze ich die Position des gefundenen Netzes auf die aktuelle GPS Position, ansonsten lasse ich die alte bestehen. Kannte ich das Netzwerk noch nicht, dann habe ich es in die Liste der gefundenen Netze aufgenommen und die aktuelle GPS Position als Netzposition gesetzt.
Letztendlich erhalte ich so eine nette Liste von Wifi-Infrastrukturen, und die GPS Koordinaten von dem Ort, an dem man sich am Nächsten an der Infrastruktur befunden hat. Natuerlich koennte man das noch verbessern, indem man sich der Mathematik bedient, aber da die Reichweite von Access Points noch weit unter Sichtweite ist, ist das erstmal egal.
Bei der Programmierung ist mir aufgefallen, dass ich Wifi-orientiert arbeite, d.h. ich finde Netze und suche mir dazu die Positionen. Es geht natuerlich auch andersherum: Jedesmal, wenn mir der GPS Receiver eine Koordinate rauswirft, also meist mit einem ausreichenden Takt von 1Hz, dann kann ich die zur Zeit verfuegbaren Netze dazu assoziieren. Letztlich geht es hierbei um zwei Betrachtungsweisen, die sich zwei verschiedenen Fragen widmen:
- Welche Infrastrukturen gibt es an der Position X?
- Welche Position hat die Infrastruktur Y?
Beide Fragen sind durchaus interessant. Die Frage, die von den meisten Geoprogrammen beantwortet wird, ist die zweite, da gerade diese beim Wardriving interessant ist. Was ich mich jetzt frage ist:
Gibt es Anwendungsfaelle, bei denen es wichtiger ist, zu wissen welche Infrastrukturen an einer bestimmten Position sind? Wenn ja: Ist ein Hybridverfahren* eventuell geeignet?
* Das Hybridverfahren, das ich mir vorstelle, laesst sich wohl am Besten durch ein Event-basiertes System und einer Datenbank entwickeln:
Hierbei registriert sich die Klasse Main bei zwei Listenern, und implementiert deren Interfaces. Beide Methoden networkFound() und positionChanged() machen jetzt im Prinzip das Gleiche:
- Gefundene Netzwerke (im networkFound()-Fall genau eins) werden in die Datenbank geschrieben (z.B. in die Tabelle networks).
- Die Position wird in die Datenbank geschrieben (z.B. in die Tabelle positions).
- Es werden Relationen in eine dritte Tabelle (z.B. network_positions) geschrieben. Darin enthalten sind nur die jeweiligen IDs der Netzwerke bzw. Positionen.
Mit dem Verfahren lassen sich beide Fragen beantwortet. Dieses Verfahren ist jedoch nicht verbreitet (keins der bekannten Tools arbeitet auf diese Weise). Aber wieso nicht?









