GeoLocation

Wechseln zu: Navigation, Suche

Unter GeoLocation versteht man die geographische Position eines Internetnutzers, die auf verschiedene Weisen mehr oder minder genau bestimmt werden kann.

Lokalisierung via IP-Adresse

IP-Adressen können dem entsprechenden Internetanbieter zugeordnet werden, dessen Standort eine erste Vermutung auf die ungefähre Position zulässt. Kombiniert mit anderen Varianten (näher beschrieben in "Internet Geolocation and Evasion"), z.B. über AS-Informationen können den Ort präzisieren. IP-Adressen, die Unternehmen oder z.B. Universitäten zugeordnet sind, lassen meist sehr genaue Rückschlüsse auf die geographische Lage zu.

Im Allgemeinen bekommt man über die IP-Adresse jedoch nur eine sehr vage Vorstellung über die Position des Nutzers.

Lokalisierung via MAC-Adresse

Die MAC-Adresse des WLAN-Netzwerkadapters lässt eine eindeutige Identifizierung zu. Diese wird von GeoLocation Services benutzt, um den zugehörigen Ort zu speichern.

  • Mobile Geräte mit GPS senden die MAC-Adressen aller WLANs in Reichweite und ihre aktuelle Position an GeoLocation-Dienste (eine Verbindung mit den WLANs ist dazu nicht vonnöten).
Konkrete Beispiele:
  • Apple nutzte in ihren Smartphones bis April 2010 den GeoLocation-Dienst Skyhook. Seitdem betreiben sie ihre eigene WiFi Access Point Database. [1]
  • Android Smartphones setzten zuerst auf vorinstalliertes Google Gears in Chrome, seit längerem existieren aber auch Libraries, die auch auf die Google GeoLocation-Dienste zurückgreifen. [2]
  • Auch mobile Telefone ohne GPS sind in der Lage MAC-Adressen und die aktuelle Position (durch die eingebuchte Funkzelle) an GeoLocation-Dienste mitzuteilen (je nach Größe der Funkzelle mehr oder weniger genau)
  • Einige Unternehmen erfassen mit Fahrzeugen mit spezieller Ausstattung alle WLANs in Straßennähe, darunter Google (im Zuge von StreetView).

MAC-Adressen sind im Gegenteil zu IP-Adressen für die Betreiber von Internetseiten im Normalfall nicht sichtbar. Eine Ortung des Benutzers z.B. im Falle von (mobilen) Applikationen ist aber durchaus möglich. Besonders bei Geräten ohne GPS sind sie quasi unabdingbar für sog. Location-based Services.

Lokalisierungsbeispiel via GeoLocation API

Mithilfe der Google Gears GeoLocation API ist es möglich, MAC-Adressen von WLAN-Interfaces auf ihren Ort hin nachzuschlagen.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import sys 
import urllib2
import json
 
# print usage information
if len(sys.argv) == 1:
	arg = sys.argv[0] if sys.argv[0][0] == "." else "python %s" % sys.argv[0]
	print "Usage: %s xx:xx:xx:xx:xx:xx" % arg
	quit()
 
# get MAC from command line argument
givenMac = sys.argv[1]
 
# prepare JSON request by encoding the request fields
postData = {"version": "1.1.0", 
            "host": "maps.google.com", 
            "request_address": "true", 
            "address_language": "en_GB", 
            "wifi_towers": [{
                "mac_address": givenMac, 
                "signal_strength": 8, 
                "age": 0}]}
 
postDataJson = json.dumps(postData)
 
# request location
req = urllib2.Request("http://www.google.com/loc/json", postDataJson, {"content-type": "application/json"})
response_stream = urllib2.urlopen(req)
response = response_stream.read()
 
# decode the response fields
responseJson = json.loads(response)
location = responseJson["location"]
 
# start output
address = ""
if "street" in location["address"]:
	address += location["address"]["street"]
if "street_number" in location["address"]:
	address += " " + location["address"]["street_number"]
 
address += "\n"
 
if "postal_code" in location["address"]:
	address += location["address"]["postal_code"] + " "
if "city" in location["address"]:
	address += location["address"]["city"]
if "county" in location["address"]:
	address += " (" + location["address"]["county"] + ")"
 
address += "\n"
 
if "region" in location["address"]:
	address += location["address"]["region"] + ", "
if "country" in location["address"]:
	address += location["address"]["country"]
if "country_code" in location["address"]:
	address += " (" + location["address"]["country_code"] + ")"
 
print """
Information about %(givenMac)s
 
Accuracy: %(accuracy)sm
Latitude: %(latitude)s
Longitude: %(longitude)s
 
Approximate address:
%(address)s
 
See on OpenStreetMap: http://www.openstreetmap.org/?mlat=%(latitude)s&mlon=%(longitude)s
See on Google Maps: http://maps.google.com/maps?q=%(latitude)s,+%(longitude)s
""" % \
    {"givenMac" : givenMac, 
    "accuracy" : location["accuracy"], 
    "latitude" : location["latitude"], 
    "longitude" : location["longitude"],
    "address" : address.encode("utf-8")}

Wenn der obige Python-Code als mac2location.py abgelegt wird, erfolgt der Aufruf wie folgt:

python mac2location.py xx:xx:xx:xx:xx:xx

Wobei xx:xx:xx:xx:xx:xx durch die MAC-Adresse des WLAN-Interfaces zu ersetzen ist, dessen Ort bestimmt werden soll.

Weiterführende Links