Geowifi

From C4 Wiki
Jump to: navigation, search

Seit dem neuen Firefox 3.5 kann man nun mittels Wlan seine Position, bis auf wenige Meter genau, lokalisieren. Hierzu wird eine Datenbank von google genutzt, in der sowohl die BSSID (MAC Adresse) als auch die Position des WLAN Access-Points gespeichert sind. Die Abfrage laeuft ueber json. Dabei wird eine Liste mit BSSID und den jeweiligen Signalstaerken uebergeben. Die Antwort beinhaltet dann die Position, sowie die Genauigkeit.

Achtung wenn die ESSID nicht in der Datenbank enthalten ist, wird zur Bestimmung geoip genutzt. Erkennbar an einem hohen accuracy Wert.

Wer das Ganze mal testen moechte hier kein kurzes Python Script. Es kann der Liste wifi_towers auch mehrere AP's uebergeben werden, um sein Standpunkt genauer zu bestimmen. Die BSSID wird dem Script per Parameter uebergeben.

#!/usr/bin/python
import json, urllib2, sys


req = {
        "version": "1.1.0",
        "host": "maps.google.com",
        "request_address": True,
        "address_language": "en_GB.UTF-8",
        "wifi_towers": [{'age': 0, 'signal_strength': -85, 'mac_address': sys.argv[1].replace(":","-")}]
      }


print "Get Location of: %s" % req['wifi_towers'][0]['mac_address']
result = urllib2.urlopen(urllib2.Request(url='http://www.google.com/loc/json', data=json.dumps(req)))
location = json.loads(result.read())
if location['location']['accuracy'] < 1000:
        print "http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=%s+%s" %(location['location']['latitude'] , location['location']['longitude'])
        print "http://www.openstreetmap.org/?mlat=%s&mlon=%s" %(location['location']['latitude'] , location['location']['longitude'])
        print "latitude: %s\t longitude: %s\t accuracy: %s " % (location['location']['latitude'] , location['location']['longitude'], location['location']['accuracy'])
else:
        print "not found :("